据我所知,MINUS Query不会验证表中的每个列数据。它将仅验证来自源的匹配记录数与目标中的记录数。
我们说
消息来源 10 20 三十 目标正在 10 40 30
从源MINUS中选择列A从Target中选择列将输出0。由于存在单个记录不匹配,因此不会将1作为输出。对。请澄清一下。我知道,但这成了一个争论。 谢谢你的时间。
答案 0 :(得分:0)
WITH
Source (COL) AS (
SELECT 10 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 20 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 30 FROM SYSIBM.SYSDUMMY1
)
,Target (COL) AS (
SELECT 10 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 40 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 30 FROM SYSIBM.SYSDUMMY1
)
SELECT COL FROM Source
MINUS
SELECT COL FROM Target
正如您从the documentation所见:
除了或除了所有 通过组合两个其他结果表(R1和R2)来派生结果表。如果指定了EXCEPT ALL,则结果包含所有行 在R2中没有相应的行,其中有重复的行 重大。如果指定了EXCEPT而没有ALL选项,则结果 包含仅在R1中的所有行,其中包含重复的行 这项行动的结果已经消除。
For compatibility with other SQL implementations, MINUS can be specified as a synonym for EXCEPT.
因此,EXCEPT
(或MINUS
)只返回第一个表中第二个表中没有匹配项的行。在这种情况下,您将获得20
。
答案 1 :(得分:-1)
我认为你错了。这里减去子句将返回20作为记录。
欲了解更多信息,请阅读: - http://www.toadworld.com/platforms/ibmdb2/w/wiki/7696.minus-clause.aspx