从表中选择记录,这些记录不存在于另一个表中

时间:2015-06-11 11:37:46

标签: mysql sqlite jdbc

我在sqlite DB中有2个表TABLE1TABLE2。表2列出了TABLE1的一些记录。我想要的是选择表1中的所有记录,这些记录在TABLE2中不存在。所以我编码:

String sq = "SELECT TABLE1.name, TABLE1.surname, TABLE1.id FROM TABLE1"
            + "LEFT JOIN TABLE1"
            + "ON TABLE1.id <> TABLE2.id";

然而,这个查询会返回一些我无法得到的东西..哪个是正确的查询?

2 个答案:

答案 0 :(得分:2)

在第二个表中检查NULL,如:

SELECT TABLE1.name, TABLE1.surname, TABLE1.id 
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.id = TABLE2.id
WHERE TABLE2.id IS NULL

NOT EXISTS的替代解决方案:

SELECT TABLE1.name, TABLE1.surname, TABLE1.id 
FROM TABLE1
WHERE NOT EXISTS(SELECT * FROM TABLE2 WHERE TABLE1.id = TABLE2.id)

NOT IN还有一个:

SELECT TABLE1.name, TABLE1.surname, TABLE1.id 
FROM TABLE1
WHERE TABLE1.id NOT IN(SELECT id FROM TABLE2)

答案 1 :(得分:1)

使用子查询返回表2的所有id,现在包括table1中表2中不存在的那些id。

Select name, surname, id from TABLE1 where id not in (Select id from TABLE2)