注册 登录
编程论坛 SQL Server论坛

复杂的SQL查询

taoxinhui 发布于 2008-01-14 19:20, 1450 次点击
我现在有5个表
表1
sell_id  item_id
we0001   lw00001
we0002   lw00002
we0003   lw00003
表2
item_id  item_de_id
lw00001   ls00001
lw00002   hz00001
lw00003   dl00001
表3
ls_id    email
ls00001  [email]gu@[/email]
表3
hz_id    email
hz00001   [email]zp@[/email]
表4
dl_id    email
dl00001   [email]zw@[/email]
我现在要通过搜索email得到表1的ID,请问怎么写这个SQL语句.麻烦了各位.我想了很久.麻烦各位了
5 回复
#2
purana2008-01-14 20:27
将后面三个表用Union All合并.
然后再通过id与表1进行连接即可.
#3
taoxinhui2008-01-14 21:57
回复 2# 的帖子
关键是不会写啊,单个的还能写出来.麻烦写出来一下可以吗?
#4
taoxinhui2008-01-14 22:34
回复 2# 的帖子
select * from lw_item_account
where item_id in (
select item_id from lw_deputy_info,lw_item where lw_item.item_deputy_id=lw_deputy_info.deputy_id and deputy_email like '%"&search_supply&"%' order by deputy_id desc
 union
select item_id from lw_teacher_info,lw_item where lw_item.item_deputy_id=lw_teacher_info.teacher_id and item_teacher_email like '%"&search_supply&"%' order by teacher_id desc
  union
select item_id from lw_member_info,lw_item where lw_item.item_deputy_id =lw_member_info.member_id and member_email like '%"&search_supply&"%' order by member_id desc)
这样写对不对?
#5
provoke2008-01-20 15:08

如果要求Email是在表3、表4、表5中任意一个表中存在的,来搜索表1中的sell_id:

select 表1.sell_id
from 表1,表2
where 表1.item_id=表2.item_id and 表2.item_de_id in (
select distinct ls_id from 表3
union
select distinct hz_id from 表4
union
select distinct dl_id from 表5
)
前提是:表3表4和表5的这三个字段的定义是一样的。

另外,你的表结构是不是给错了,有2个表3却没有表5,应该是这样的吧:
表3
ls_id    email
ls00001  [email]gu@[/email]
表4
hz_id    email
hz00001   [email]zp@[/email]
表5
dl_id    email
dl00001   [email]zw@[/email]

我写的SQL语句当成是这样的表结构的。


其实表3表4表5的数据没有必要分开在3个表里存储,只需一个表就OK了,添加多一个字段来区分类别:

表345
item_de_id    email    item_de_id_type
ls00001   [email]gu@[/email]    ls_id
hz00001   [email]zp@[/email]    hz_id
dl00001   [email]zw@[/email]    dl_id

[[italic] 本帖最后由 provoke 于 2008-1-20 15:13 编辑 [/italic]]
1