如何区分两个表

时间:2010-05-12 13:23:22

标签: sql android sqlite

我有两个表,我希望从一个表中获取与第二个表中的记录不同的所有记录。

例如:如果第一个表中有四个记录,如A,B,C,D,第二个表中有三个记录,即A,B,C,则查询的答案应为D.

我尝试过“EXCEPT”运算符,但它运行不正常。请帮助我为给定的问题编写正确的查询。

5 个答案:

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