【问题标题】:SQL: Compare 2 tables with duplicatesSQL:比较 2 个重复的表
【发布时间】:2011-12-17 10:51:06
【问题描述】:

我需要比较 2 个表以查找重复项,但字段允许重复项。

For Example: 
Tbl1:
455
7991
7991

Tbl2: 
455
7991
7991
7991

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

【问题讨论】:

  • 表中只有你的值,7991的其他值不一样吗?
  • 这适用于 Microsoft Access。我尝试了下面的代码,但没有成功。我不确定我是否理解您的问题 greg?

标签: sql ms-access join compare duplicates


【解决方案1】:
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

【讨论】:

  • +1 这在我看来像是 MS Access 的正确方法。我编辑了 SQL,因为我认为 Access 的数据库引擎不接受 JOIN 作为 INNER JOIN 的同义词。如果您打算做其他事情,请更改它。如果它不能像写的那样工作,我会将t1.colCount &lt;&gt; t2.colCount 移动到 WHERE 子句。
【解决方案2】:

如果您的数据库支持 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

【讨论】:

  • 感谢您的快速回复!我现在就开始。
猜你喜欢
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2023-04-05
  • 1970-01-01
  • 2020-04-19
相关资源
最近更新 更多