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)/*
一二两语句逻辑根本不一样,主要区别在于,当某列值相同时,其它列是否要比较对应相同(即在某列,或某几列相同的前题下)
*/
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)/*
一二两语句逻辑根本不一样,主要区别在于,当某列值相同时,其它列是否要比较对应相同(即在某列,或某几列相同的前题下)
*/
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 ...”这两条记录; 第二个语句确不会删除任何一条记录。