我正在对数据库应用程序进行一些维护工作,但我发现,即使一个表中的值以外键的形式使用,但表上没有外键约束。
我正在尝试在这些列上添加FK约束,但是我发现,由于表中已经存在大量错误数据,这些错误数据已经被天真的纠正了,因此我需要查找那些行。匹配另一个表,然后将其删除。
我在网络上找到了一些此类查询的示例,但它们似乎都提供了示例而不是说明,而且我不明白它们为什么起作用。
有人可以向我解释如何构造一个查询,该查询返回另一个表中没有匹配项的所有行以及它在做什么,以便我可以自己进行这些查询,而不是对具有这种混乱的每个表运行SO没有FK限制?
这是一个简单的查询:
SELECT t1.ID
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID = t2.ID
WHERE t2.ID IS NULL
关键点是:
LEFT JOIN
用来; 这将返回来自的所有行Table1
,而不管其中是否有匹配的行Table2
。
该WHERE t2.ID IS NULL
条款;这会将返回的结果限制为仅返回IDTable2
为null的那些行,换句话说,没有Table2
针对该ID的特定记录Table1
。Table2.ID
对于Table1
ID中与ID不匹配的所有记录,将以NULL的形式返回Table2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句