SQL查询以查找不存在主键的位置

时间:2010-07-27 03:07:11

标签: sql sql-server sql-server-2005 tsql

为表添加了一个外键关系,我不得不放弃检查创建数据。我假设一些父(公司)对象已被删除,我想找到孤立(分区)记录。 如何找到主表中不存在外键的行?

这就是我的想法,但我正在努力使用where子句。

               SELECT  tb_Division.DivisionName, 
                           tb_Division.DivisionCompanyID
                 FROM  tb_Division 
LEFT OUTER JOIN tb_Company ON tb_Division.DivisionCompanyID = tb_Company.CompanyID 
               WHERE (tb_Company.CompanyID = NULL 
                           OR 'doesn't exist in tb_Company')

任何指针都非常赞赏。

2 个答案:

答案 0 :(得分:6)

你差不多了,但是你需要使用IS NULL谓词进行比较:

SELECT  d.DivisionName, d.DivisionCompanyID
FROM  tb_Division d LEFT OUTER JOIN tb_Company c 
  ON d.DivisionCompanyID = c.CompanyID 
WHERE c.CompanyID IS NULL

或者你可以这样写,这可以做同样的事情,也许它更直观:

SELECT  d.DivisionName, d.DivisionCompanyID
FROM  tb_Division d
WHERE NOT EXISTS (SELECT * FROM tb_Company c WHERE d.DivisionCompanyID = c.CompanyID);

答案 1 :(得分:1)

您还可以针对SQL Server 2005/2008运行此t-sql查询,以使系统中的所有表都没有群集非群集索引

select name 
from sys.tables t 
where not exists(select * from sys.indexes i 
    where i.object_id = t.object_id and index_id > 0)
order by name

这些表称为HEAP,可能比具有聚集索引的表慢得多。