6

SQL 服务器 2005。

我正在将外键约束添加到据称不需要它们的应用程序的数据库中。自然地,数据变得不可靠,并且外键字段中存在孤立条目。

设置:
两个表,TableUser 和 TableOrder。TableUser 具有主键“UserID”,TableOrder 具有外键“UserID”。

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

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

4

3 回答 3

10

这是一种方法:

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

有许多不同的方法来编写这种查询。

于 2008-11-03T18:23:35.643 回答
4

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

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

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

于 2008-11-03T18:59:51.313 回答
0

表中一开始就没有 FK 约束。它们像 FK 和 PK 一样使用,但没有编码——相信它们是不必要的开销。所以我们有所有的列,但没有编码约束。当我去把它们放进去执行它们时,我发现有很多违规行为。

你的问题突出了问题。它们不是不必要的开销,它们可以防止人们对一般数据库进行破坏。

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

于 2008-11-04T14:13:25.727 回答