【问题标题】:Select records from a table, which don't exist in another table从一个表中选择另一个表中不存在的记录
【发布时间】:2015-08-27 02:01:59
【问题描述】:

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

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

但是这个查询返回的东西我不明白。哪个是正确的查询?

【问题讨论】:

  • LEFT JOIN TABLE1TABLE2 ?

标签: mysql sqlite jdbc


【解决方案1】:

在第二个表中检查NULLs,例如:

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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 2022-01-21
      • 2016-06-21
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多