SQL MINUS显示第一个和第二个之间没有区别,而显示第二个和第一个之间的差异

时间:2016-03-03 08:32:02

标签: sql oracle oracle11g

SQL MINUS用作:

{{1}}

如果我看到第一个减去第二个之间没有区别,但看到第二个减去第一个之间的差异,这意味着什么?有什么真正的区别吗?如果是这样,那么我为什么以及如何获得第一减去第二而没有区别? 请帮忙。

3 个答案:

答案 0 :(得分:4)

您可以参考文档以了解MINUS operator

  

Oracle MINUS运算符用于返回第一行中的所有行   SELECT语句,不是由第二个SELECT语句返回的。   每个SELECT语句都将定义一个数据集。 MINUS运营商将   从第一个数据集中检索所有记录,然后从中删除   结果来自第二个数据集的所有记录。

因此,如果table1的所有记录都存在于table2中,那么输出中将不会显示任何记录。但是当您反转表格并且记录发生变化时,可以看到相同的记录差异。

enter image description here

答案 1 :(得分:2)

当然有,MINUS是第一张表中的所有记录的第二个,显示在第二个表中。

举个例子:

TABLE1:

ID
 1
 2
 4

表2:

ID
 1
 2
 4
 5

SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2

不会返回任何内容,因为1,2,4(所有table1记录)出现在table2上,尽管它们没有完全相同的内容。

反对:

SELECT * FROM TABLE2
MINUS
SELECT * FROM TABLE1

将返回5,因为它是唯一没有出现在table1

上的值

所以即使你从同一张桌子中选择,如果你选择不同的内容(不同的条件),那么减去双方都不会平等地工作。

答案 2 :(得分:1)

如果我理解正确,有两种问题如下:

  1. Table1和Table2有行数,但行数不同:在这种情况下,使用Table1 Minus Table2将得到与Table2 Minuse table1相同的结果。

  2. 不同的行数:在这种情况下,Table1 Minus Table2只返回Table1中存在的那些行,而Table2中不存在这些行。 如果要返回Table2中存在的行,并且Table1中不存在,则必须编写Table2 Minus Table1。

  3. 如果要返回所有差异,则可以使用UNION ALL:

    Table1 MINUS Table2
    UNION All
    Table2 MINUS Table1