我有两个表,我希望从一个表中获取与第二个表中的记录不同的所有记录。
例如:如果第一个表中有四个记录,如A,B,C,D,第二个表中有三个记录,即A,B,C,则查询的答案应为D.
我尝试过“EXCEPT”运算符,但它运行不正常。请帮助我为给定的问题编写正确的查询。
答案 0 :(得分:7)
怎么样:
select * from TABLE_A where (COL,COL2,..) not in (select COL1,COL2,.. from TABLE_B)
union all
select * from TABLE_B where (COL1,COL2,..) not in (select COL1,COL2,.. from TABLE_A);
答案 1 :(得分:3)
如果第一个表称为TABLE_A,第二个表称为TABLE_B,为了增强差异,可以使用MINUS操作数,双方。这意味着:
SELECT * FROM TABLE_B
MINUS
SELECT * FROM TABLE_A;
前面的语句显示TABLE_B中存在的记录,但不存在于TABLE_A中。
当然,你必须在另一边使用MINUS:
SELECT * FROM TABLE_A
MINUS
SELECT * FROM TABLE_B;
前面的语句显示TABLE_A中存在的记录,但不存在于TABLE_B中。
如果您不想使用MINUS,可以使用之前的语句创建两个Oracle VIEWS。
答案 2 :(得分:2)
怎么样:
SELECT DISTINCT Field1
FROM Table1
WHERE Field1 Not IN
(SELECT DISTINCT Field1 FROM Table2)
答案 3 :(得分:1)
您可以使用EXCEPT,它的工作原理如下:
表测试1:A,B,C 表测试2:A,B,C,D
从 test1 中选择*,但从 test2 中选择*:将返回 test1 中的记录,但不会返回中的记录TEST2 即可。结果将为空。
从 test2 中选择*,但从 test1 中选择*:将返回 test2 中但不包含在中的记录TEST1 即可。此查询的结果将为您提供“D”。
答案 4 :(得分:1)
SELECT * FROM TABLE_B
MINUS
SELECT * FROM TABLE_A;
这可能不适用于sqlite,但以下内容
SELECT DISTINCT Field1
FROM Table1
WHERE Field1 Not IN
(SELECT DISTINCT Field1 FROM Table2);