如何查询与其约束不匹配的外键?

Dav*_*ave 5 t-sql sql-server-2005 foreign-keys foreign-key-relationship

SQL Server 2005.

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

设置:
两个表,TableUser和TableOrder.TableUser具有主键'UserID',TableOrder具有外键'UserID'.

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

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

Gre*_*ill 8

这是一种方式:

select * from TableOrder where UserID not in (select UserID from TableUser);
Run Code Online (Sandbox Code Playgroud)

编写此类查询有许多不同的方法.


Bra*_*adC 6

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

SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL
Run Code Online (Sandbox Code Playgroud)

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