当前位置: 首页 > 面试题库 >

比较两个表,查找丢失的行和不匹配的数据

蓟辰沛
2023-03-14
问题内容

我想比较两个表并获得一组结果,其中查找值不匹配以及其他表中的键值缺失。第一部分在以下查询中可以正常工作:

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    t1.mID = t2.aID AND
    t1.mLookup <> t2.aLookup

但是,它不会返回t1和t2中其他表中没有对应ID的行(由于ON t1.mID = t2.aID)。

如何在同一查询中实现两者?


问题答案:

删除WHERE子句的ID部分。在FULL OUTER JOIN ON t1.mID = t2.aID足以表连接在一起。FULL OUTER
JOIN将返回联接中的两个表,即使其中一个不匹配也是如此。

但是,该WHERE t1.m_ID = t2.aID子句将结果限制为两个表中都存在的ID。这有效地导致的FULL OUTER JOIN行为像INNER JOIN

换一种说法:

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    --t1.mID = t2.aID AND -- remove this line
    t1.mLookup <> t2.aLookup

- 编辑 -

重新阅读您的问题,您只想要不匹配的内容。在这种情况下,您需要搜索任何一方的ID为NULL的位置:

SELECT * FROM (
    SELECT  mID, mLookup
    FROM m) t1

FULL OUTER JOIN (
    SELECT  aID, aLookup
    FROM a) t2

ON t1.mID = t2.aID

WHERE
    t1.mID IS NULL OR
    t2.mID IS NULL OR
    t1.mLookup <> t2.aLookup


 类似资料:
  • 嗨,我有两个自定义数组列表,我想从一个数组列表中删除与第二个数组列表匹配的类似项。

  • 我有两个文件file1。txt和file2。txt。 文件1。文本 file2.txt 我想匹配文件1的第1、2和3列。带有文件2第1、4和5列的txt。txt。如果匹配,则将匹配行与以下行一起打印,直到,但不要打印。我用“awk”命令试过了

  • 问题内容: 我想知道如何比较两个不同的数据库 表记录 。我的意思是,我将比较两个数据库表,它们可能具有不同的列名但具有相同的数据。但是其中一个表可能比另一个表具有更多的记录,因此我想看看这两个表之间的区别是什么。为此,如何编写sql查询?仅供参考:这两个数据库都在同一个SQL Server实例下。 然后,在比较表1和表2之后,它应该 从 表2返回 Ruby Core。 问题答案: 如果执行从T1到

  • 我有两份清单<代码>列表1包含一些城市。 列表2包含子列表。每个子列表包含一个人已经访问过的国家(一个子列表=一个人访问过的国家)。在这个例子中,Person1去了罗马、阿姆斯特丹和维也纳,Person2去了阿姆斯特丹、巴塞罗那和米兰。。。 我想知道有多少人已经去过第一个名单上的国家。不应重复计算。因此,如果人员1已经从列表1前往两个国家,则只应计算一次。 我想用JavaStreams实现这个。有

  • 我目前正在尝试比较两个数据帧(例如df1和df2)的列名,并从其中一个(df2)中提取值(如果匹配的话),以创建一个新的(第三个)数据帧。

  • 问题内容: 我有以下代码 这是输出 现在我意识到float和int是不同的,但是考虑到四舍五入,我本来希望两个值匹配。我已经通过强制转换为int解决了它。 所以我的问题是,为什么这个比较不能像我期望的那样工作(两个值都匹配)? 问题答案: 请注意PHP手册中的 红色大警告 ! 比较浮点数时不要指望任何东西。即使精度为0,舍入结果仍然是浮点数。在您的特定情况下,碰巧结果要比预期的大一点,因此强制转换