MINUS QUERY是否验证表格之间的每条记录?

时间:2015-06-05 13:43:06

标签: sql db2

据我所知,MINUS Query不会验证表中的每个列数据。它将仅验证来自源的匹配记录数与目标中的记录数。

我们说

消息来源 10 20 三十 目标正在 10 40 30

从源MINUS中选择列A从Target中选择列将输出0。由于存在单个记录不匹配,因此不会将1作为输出。对。请澄清一下。我知道,但这成了一个争论。 谢谢你的时间。

2 个答案:

答案 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