SQL MINUS用作:
{{1}}
如果我看到第一个减去第二个之间没有区别,但看到第二个减去第一个之间的差异,这意味着什么?有什么真正的区别吗?如果是这样,那么我为什么以及如何获得第一减去第二而没有区别? 请帮忙。
答案 0 :(得分:4)
您可以参考文档以了解MINUS operator:
Oracle MINUS运算符用于返回第一行中的所有行 SELECT语句,不是由第二个SELECT语句返回的。 每个SELECT语句都将定义一个数据集。 MINUS运营商将 从第一个数据集中检索所有记录,然后从中删除 结果来自第二个数据集的所有记录。
因此,如果table1的所有记录都存在于table2中,那么输出中将不会显示任何记录。但是当您反转表格并且记录发生变化时,可以看到相同的记录差异。
答案 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)
如果我理解正确,有两种问题如下:
Table1和Table2有行数,但行数不同:在这种情况下,使用Table1 Minus Table2将得到与Table2 Minuse table1相同的结果。
不同的行数:在这种情况下,Table1 Minus Table2只返回Table1中存在的那些行,而Table2中不存在这些行。 如果要返回Table2中存在的行,并且Table1中不存在,则必须编写Table2 Minus Table1。
如果要返回所有差异,则可以使用UNION ALL:
Table1 MINUS Table2
UNION All
Table2 MINUS Table1