为表添加了一个外键关系,我不得不放弃检查创建数据。我假设一些父(公司)对象已被删除,我想找到孤立(分区)记录。 如何找到主表中不存在外键的行?
这就是我的想法,但我正在努力使用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')
任何指针都非常赞赏。
答案 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,可能比具有聚集索引的表慢得多。