2011-10-28 128 views
3

我需要比较2个表来找到重复,但这些字段允许重复。SQL:比较两个表与重复

For Example: 
Tbl1: 
455 
7991 
7991 

Tbl2: 
455 
7991 
7991 
7991 

我需要编写一个查询,显示有一个额外的7991在表2中我尝试了右连接,但它仍然找到了比赛,因此不能正常工作。如果有人能指出我正确的方向,我将不胜感激。谢谢!!

+0

什么RDBMS是这个呢? –

+0

这是您在表中唯一的价值,7991的其他值是不同的? – GregM

+0

这是用于Microsoft Access的。我尝试了下面的代码,但他们没有解决。我不知道我理解你的问题格雷格? – user1018766

回答

2
SELECT t1.colname 
FROM (SELECT colname 
        , COUNT(colname) AS colCount 
      FROM  tbl1 
      GROUP BY colname 
     ) t1 
     INNER JOIN (SELECT colname 
         , COUNT(colname) AS colCount 
       FROM  tbl2 
       GROUP BY colname 
      ) t2 ON t1.colname = t2.colname 
        AND t1.colCount <> t2.colCount 
+0

+1这看起来像我喜欢MS Access的正确方法。我编辑了SQL,因为我不认为Access的数据库引擎接受JOIN作为INNER JOIN的同义词。如果你想要别的东西,请更改它。如果它不能像写入那样工作,我会将't1.colCount <> t2.colCount'移动到WHERE子句。 – HansUp

+0

完美工作,谢谢! – user1018766

1

如果你的数据库支持FULL OUTER JOIN(不是MySQL的)这会给你所有的两个表之间的差异:

SELECT 
    T1.x, 
    COALESCE(T1.cnt, 0) AS T1_count, 
    COALESCE(T2.cnt, 0) AS T2_count 
FROM 
(
    SELECT x, COUNT(*) AS cnt 
    FROM Tbl1 
    GROUP BY x 
) T1 
FULL OUTER JOIN 
(
    SELECT x, COUNT(*) AS cnt 
    FROM Tbl2 
    GROUP BY x 
) T2 
ON T1.x = T2.x 
WHERE T1.cnt <> T2.cnt 
+0

感谢您的快速响应!我现在就开始吧。 – user1018766