我正在对数据库应用程序进行一些维护工作,但我发现,即使一个表中的值以外键的形式使用,但表上没有外键约束。我正在尝试在这些列上添加FK约束,但是我发现,由于先前的错误已被天真纠正,因此表中已经存在大量不良数据,因此我需要查找那些行匹配另一个表,然后将其删除。我在网络上找到了一些这种查询的示例,但是它们似乎都提供了示例而不是说明,而且我不明白它们为什么起作用。有人可以向我解释如何构造一个查询,该查询返回另一个表中没有匹配项的所有行,以及它在做什么,以便我可以自己进行这些查询,而不是为混乱中的每个表运行SO 没有FK限制?
3 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
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 中所有的列表。
添加回答
举报
0/150
提交
取消