A 表
IDM DM JC
100 1001 399
100 100 302
200 200 393
200 234 400B 表
DM CS
1001 1
100 1
1001 2
200 3
200 4
234 3
234 4
要提的数据是:
IDM 相同的 DM 在B表里面 应该 对应的 cs 一样。 即 一个dm 如果有这个cs 那么 另一个 相同 idm 的 dm 也应该有 这个 相同的cs 。如果没有就提出来
上面的结果 为
dm cs
100 2
IDM DM JC
100 1001 399
100 100 302
200 200 393
200 234 400B 表
DM CS
1001 1
100 1
1001 2
200 3
200 4
234 3
234 4
要提的数据是:
IDM 相同的 DM 在B表里面 应该 对应的 cs 一样。 即 一个dm 如果有这个cs 那么 另一个 相同 idm 的 dm 也应该有 这个 相同的cs 。如果没有就提出来
上面的结果 为
dm cs
100 2
看来貌似偶还算清醒的哇 lz意思应该是根据IDM分组 然后查询到每组的DM 然后每个DM在B表中对应的CS值要相同 排序看下
--分组后的表A
IDM DM
100 1001,100
200 200 ,234--按表A分组后对应的表B
DM CS
1001 1
100 11001 2 --1001的cs值为2而100没有对应cs=2 200 3
234 3 200 4
234 4
100 100 那么 b表的 里面就应该是这样的1001 1
100 1
1001 2
100 2
而 B表中无
100 2
所以需要提出来。 这个数据是 B表中 缺的。
FROM
(select DISTINCT a.idm,b.cs from a join b on a.dm=b.dm) T
JOIN A ON A.IDM=T.IDM
LEFT JOIN B ON A.DM=B.DM AND T.CS=B.CS
WHERE B.DM IS NULL/**
IDM CS
----------- -----------
100 2(1 行受影响)
**/
from
(select * from a
where idm in
(select idm from a group by idm having count(*)>1)
) a
rightjoin
(select * from b) b
on a.dm=b.dm
where a.dm is not null
group by a.idm,b.cs
having count(*)<>2