如何选择另一个表中没有匹配条目的行?

我正在对数据库应用程序进行一些维护工作,但我发现,即使一个表中的值以外键的形式使用,但表上没有外键约束。

我正在尝试在这些列上添加FK约束,但是我发现,由于先前的错误已被天真纠正,因此表中已经存在大量不良数据,因此我需要查找那些行匹配另一个表,然后将其删除。

我在网络上找到了一些这种查询的示例,但是它们似乎都提供了示例而不是说明,而且我不明白它们为什么起作用。

有人可以向我解释如何构造一个查询,该查询返回另一个表中没有匹配项的所有行,以及它在做什么,以便我可以自己进行这些查询,而不是为混乱中的每个表运行SO 没有FK限制?


四季花海
浏览 592回答 3
3回答

牧羊人nacy

SELECT id FROM table1 WHERE foreign_key_id_column NOT IN (SELECT id FROM table2)表1有一列要向其中添加外键约束,但是foreign_key_id_column与id表2中的in 并不完全匹配。初始选择列出了idtable1中的。这些将是我们要删除的行。NOT INwhere语句中的子句将查询限制为仅foreign_key_id_column表2 ids 列表中未包含的行。SELECT括号中的语句将获得id表2 中所有的列表。
打开App,查看更多内容
随时随地看视频慕课网APP