日期:2014-05-17  浏览次数:20787 次

怎样实现这个SQL语句?
表A有列
id name code_name code
1 张三 aaa 001
1 张三 aaa 002
2 李四 aaa 001
3 王五 bbb 002

表B有列
name code
aaa 001
bbb 002

各位好,向大家请教个问题:有表A跟表B如上面所示,表B有001和002两个限制,则表A中每个人必须包含001和002两条数据,怎样用sql语句查询出表A中不满足条件的数据(即查询出表A中不同时包含001和002的人的姓名)? 上表查询出来应该是“李四”和“王五”,因为“张三”同时包含了001和002.

------解决方案--------------------
select A.name
from A,B
where A.code=B.Code
group by A.name
having count(distinct A.code)=(select count(*) from B)
------解决方案--------------------
SQL code

select A.name
from A,B
where A.code=B.Code
group by A.name
having count(distinct A.code) < (select count(*) from B)

------解决方案--------------------
SQL code
select
 A.name
from
 A,B
where
 A.code=B.Code
group by
 A.name
having
 count(distinct A.code)=(select count(1) from B)

------解决方案--------------------
SQL code
select A.name
from A
group by A.name
having count(distinct A.code) < (select count(*) from B)

------解决方案--------------------
select * from a group by name,code_name having count(*)<(select count(*) from b)
------解决方案--------------------
select A.name
from A
join B on A.code=B.code 
group by A.name
having count(distinct A.code) < (select count(*) from B)
------解决方案--------------------
select A.name
from A
where A.code in (select code from B)
group by A.name
having count(distinct A.code) <(select count(1) from B)
-------------------------
select distinct A1.name
from A A1
where exists(select * from B where B.code not in(select code from A A2 where A2.name=A1.name))
------解决方案--------------------
SQL code

select name from A where (select count(name) from A where a.code='001' and b.code='002')<2