SQL Server 2005。

我正在将外键约束添加到据称不需要它们的应用程序的数据库中。当然,数据变得不可靠,外键领域也有孤立的条目。

设定:结果 两个表,TableUser和TableOrder。 TableUser具有主键'UserID',而TableOrder具有外键'UserID'。

如何在TableUser.UserID中找到TableOrder.UserID没有匹配条目的行?

例如,TableOrder.UserID的值为250,但250没有匹配的TableUser.UserID键。

有帮助吗?

解决方案

这是一种方式:

select * from TableOrder where UserID not in (select UserID from TableUser);

编写此类查询的方法有很多种。

其他提示

另一种常见方法是左外连接:

SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL

此查询在没有where子句的情况下也可以使用,浏览并查看相应的值(如果存在),并查看哪些不匹配。

表格中没有FK约束。它们被用作FK和PK但没有编码 - 相信它们是不必要的开销。所以我们有所有列,但没有编码约束。当我把它们放进去以便它们被强制执行时,我发现有很多违规行为。

您的问题突出了问题所在。它们不是不必要的开销,它们阻止人们进行一般的数据库攻击。

格雷格和布拉德的回答都帮助了我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top