求几条sql语句?
本帖最后由 oHaoHao123456987 于 2013-09-09 20:16:17 编辑 A表
姓名 低保证号
张三 001
李四 002
李七 002
王五 003
赵九 004
杨十 002
杨二 005
B表
户主 成员 低保证号
张三 张三 001
张三 张六 001
李四 李四 002
李四 李七 002
王五 王五 003
王五 王八 003
杨一 杨一 005
杨一 杨二 005
1、A表低保证号在B表不存在的数据
赵九 004
2、A表低保证号在B表存在,但是姓名不符的数据(证号相同,但是户主、成员均不符)
杨十 002
3、A表低保证号在B表存在,并且低保证号重复的数据(杨十 002属于姓名不符这类)
李四 002
李七 002
4、正确的数据(低保证号,姓名与户主或者成员一致的数据)
张三 001
王五 003
杨二 005
也不知道说明白没有。
[解决办法]
create table #ta(姓名 varchar(10),低保证号 varchar(10))
insert into #ta
select '张三','001'
union all select '李四','002'
union all select '李七','002'
union all select '王五','003'
union all select '赵九','004'
union all select '杨十','002'
union all select '杨二','005'
create table #tb(姓名 varchar(10),成员 varchar(10),低保证号 varchar(10))
insert into #tb
select '张三','张三','001'
union all select '张三','张六','001'
union all select '李四','李四','002'
union all select '李四','李七','002'
union all select '王五','王五','003'
union all select '王五','王八','003'
union all select '杨一','杨一','005'
union all select '杨一','杨二','005'
--问题1.
select *
from #ta a
where not exists(select 1 from #tb b where a.低保证号=b.低保证号)
/*
赵九004
*/
--问题2.
select *
from #ta a
where not exists(select 1 from #tb b where a.低保证号=b.低保证号 and a.姓名=b.成员)
and exists(select 1 from #tb c where a.低保证号=c.低保证号)
/*
杨十002
*/
--问题3.
select *
from #ta t
where 低保证号 in
(
select 低保证号
from #ta a
where exists(select 1 from #tb b where a.低保证号=b.低保证号 and a.姓名=b.成员)
group by 低保证号
having count(*)>1
)
and exists(select 1 from #tb c where t.低保证号=c.低保证号 and t.姓名=c.成员)
/*
李四002
李七002
*/
--问题4.
select *
from #ta t
where 低保证号 in
(
select 低保证号
from #ta a
where exists(select 1 from #tb b where a.低保证号=b.低保证号 and a.姓名=b.成员)
group by 低保证号
having count(*)=1
)
/*
张三001
王五003
杨二005
*/