SQL-запрос, чтобы найти, где нет первичного ключа - PullRequest
0 голосов
/ 27 июля 2010

добавил отношение внешнего ключа к таблице, для этого мне пришлось отказаться от проверки данных при создании. Я предполагаю, что некоторые родительские (Company) объекты были удалены, и я хочу найти потерянные (Division) записи. Как найти строку, в которой внешний ключ не существует в первичной таблице?

Это то, о чем я думал, но борюсь с предложением 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 ]

6 голосов
/ 27 июля 2010

Вы почти получили его, но вам нужно сравнить, используя предикат 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 голос
/ 27 июля 2010

Вы также можете запустить этот запрос t-sql для SQL Server 2005/2008, чтобы получить все таблицы в системе, не имеющие кластеризованного или некластеризованного индекса .

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 и могут быть значительно медленнее, чем таблицы с кластеризованным индексом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...