5

SQL Server 2005.如何查询与其约束条件不匹配的外键?

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

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

如何查找TableOrder.UserID在TableUser.UserID中没有匹配项的行?

例如,TableOrder.UserID具有250的值,但没有为250

+0

一旦你找到他们,你想用他们做什么?例如,删除它们? – erickson 2008-11-03 18:24:52

+0

ERRR,如果有外键,它怎么能不匹配?你的SQL实际上是否有硬编码的FK? – 2008-11-03 19:06:11

回答

8

这里匹配TableUser.UserID键是一个办法:

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

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

4

另一常用的方法是一个左外连接:

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

此查询还可以是有用的,而不where子句,通过浏览和看相应的值(如果存在的话),并查看哪些一些没有匹配。

0

表中没有FK Constraints开头。这些使用像FK和PK,但没有编码 - 相信他们是不必要的开销。所以我们有所有的列,但没有编码约束。当我把它们放进去以便执行时,我发现有很多违规行为。

您的问题突出显示了问题。它们不是不必要的开销,它们可以防止普通数据库中的人员混淆。

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