Sql server 2005 如何查询不带';不符合他们的约束条件?
SQLServer2005 我正在将外键约束添加到据称不需要它们的应用程序的数据库中。当然,数据变得不可靠,外键字段中存在孤立条目 设置:Sql server 2005 如何查询不带';不符合他们的约束条件?,sql-server-2005,tsql,foreign-keys,foreign-key-relationship,Sql Server 2005,Tsql,Foreign Keys,Foreign Key Relationship,SQLServer2005 我正在将外键约束添加到据称不需要它们的应用程序的数据库中。当然,数据变得不可靠,外键字段中存在孤立条目 设置: 两个表,TableUser和TableOrder。 TableUser具有主键“UserID”,TableOrder具有外键“UserID” 如何查找TableOrder.UserID在TableUser.UserID中没有匹配项的行 例如,TableOrder.UserID的值为250,但没有与250匹配的TableUser.UserID键。这里有一种方法
两个表,TableUser和TableOrder。 TableUser具有主键“UserID”,TableOrder具有外键“UserID” 如何查找TableOrder.UserID在TableUser.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一样使用,但没有进行编码——人们相信它们是不必要的开销。我们有所有的列,但没有编码约束。当我把它们放进去以便强制执行时,我发现有很多违规行为 你的问题突出了问题所在。它们不是不必要的开销,它们阻止人们进行一般的数据库关联
格雷格和布拉德的答案都帮了我。一旦你找到了答案,你想用它们做什么?例如,删除它们?呃,如果有外键,怎么可能没有匹配项?您的SQL中是否有硬编码的FK?他指的是一个表,其中的字段被应用程序视为外键,但从未被数据库本身强制执行。或者FK约束是在该事实之后添加的(SQL Server默认情况下不会将其应用于现有行),或者,如果有人关闭FK验证以强制执行某项操作,并因此导致数据库出错(看到太多次),我认为这是一个常见的误解。很多人认为应该在中间层做业务逻辑。但是FK是任何关系数据库的基本部分。如果数据库做不好,那么还有其他问题。。。