DECLARE @a TABLE(a INT,b VARCHAR,c INT)
INSERT @a SELECT 1,'a',2
UNION ALL SELECT 2,'b',1DECLARE @t TABLE (a INT,b VARCHAR,c INT)
INSERT @t SELECT 1,'a',2
UNION ALL SELECT 1,'b',2SELECT t.* FROM @t t WHERE a IN (SELECT a FROM @a) AND b IN(SELECT b FROM @a) AND c IN (SELECT c FROM @a)
SELECT t.* FROM @t t INNER JOIN @a a ON a.a=t.a AND a.b=t.b AND a.c=t.c
--第二个语句逻辑上相当于 in checksum
SELECT t.* FROM @t t WHERE CHECKSUM(a,b,c) IN (SELECT CHECKSUM(a,b,c) FROM @a)/*
一二两语句逻辑根本不一样,主要区别在于,当某列值相同时,其它列是否要比较对应相同(即在某列,或某几列相同的前题下)
*/

解决方案 »

  1.   

    第一个语句在逻辑上是问题的,第二个语句是正确的。比如:
        icme_hebei表中数据 人员编号  内容 类别 学科...
                          001      a    b   c ...
                          001      b    a   c ...
                          002      a    b   c ...
        icme2_hebei表中数据 人员编号  内容 类别 学科...
                          001      d    e   f ...
                          001      b    a   c ...
                          002      a    b   c ...    第一个语句是可以删除 icme_hebei 中 “001  a  b  c ...”、“001  b  a  c ...”这两条记录;     第二个语句确不会删除任何一条记录。