SQL Server 2005。
我正在将外键约束添加到据称不需要它们的应用程序的数据库中。当然,数据变得不可靠,外键领域也有孤立的条目。
设定:
两个表,TableUser和TableOrder。
TableUser具有主键'UserID',而TableOrder具有外键'UserID'。
如何在TableUser.UserID中找到TableOrder.UserID没有匹配条目的行?
例如,TableOrder.UserID的值为250,但250没有匹配的TableUser.UserID键。
答案 0 :(得分:8)
这是一种方式:
select * from TableOrder where UserID not in (select UserID from TableUser);
编写此类查询的方法有很多种。
答案 1 :(得分:4)
另一种常见方法是左外连接:
SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL
此查询在没有where子句的情况下也可以使用,浏览并查看相应的值(如果存在),并查看哪些不匹配。
答案 2 :(得分:0)
表格中没有FK约束。它们被用作FK和PK但没有编码 - 相信它们是不必要的开销。所以我们有所有列,但没有编码约束。当我把它们放进去以便它们被强制执行时,我发现有很多违规行为。
您的问题突出了问题所在。它们不是不必要的开销,它们阻止人们进行一般的数据库攻击。
格雷格和布拉德的回答都帮助了我。