日期:2014-05-18  浏览次数:20545 次

对比校验的问题
如 有 A B 2张表
 

A 表中有字段 dm,jc

B 表中有字段 dm,km,sz
其中 km字段是单选项 km 


求 存在 A 中的记录,而在 B 表中 km 字段 不等于 1 或 2 或 3的记录。

提出缺少 了 km字段中的哪个 数值。


A 表数据如下:

dm jc
001 上
002 下
003 上
004 下



B 表数据如下:

dm km
001 1
001 2 
002 1
002 2
002 3
003 3 

那么 提出的数据应该是:
001 3
003 1
003 2


坐等大大
 

------解决方案--------------------
SQL code

declare @A table (dm varchar(3),jc varchar(2))
insert into @A
select '001','上' union all
select '002','下' union all
select '003','上' union all
select '004','下'

declare @B table (dm varchar(3),km int)
insert into @B
select '001',1 union all
select '001',2 union all
select '002',1 union all
select '002',2 union all
select '002',3 union all
select '003',3

select d.dm,d.col from (select * from @A a 
cross join (select 1 as col union select 2 union select 3)c
where a.dm in (select dm from @B))d
full join  @B b on d.col=b.km and d.dm=b.dm where b.km is null order by 1
/*
dm   col
---- -----------
001  3
003  1
003  2
*/