Я знаю, это звучит просто, и я нашел много похожих примеров, но не могу понять, соответствует ли это моей конкретной проблеме c.
Я пробовал несколько вложенных выборок и некоторые левые объединения, но они не работали.
У меня есть таблица Building и таблица ComplianceItems. У здания может быть много ComplianceItems. У меня также есть таблица ComplianceItemType, которая содержит все возможные типы.
Я хочу найти все Здания, которые не имеют ComplianceItem типа 17 или 18. Я вижу много примеров, которые выбирают родительскую запись, когда нет дочерних записей. Но я хочу выбрать все родительские записи, которые не имеют элемента соответствия типа 17 или 18
Как я могу добавить это условие в свой запрос?
select OC.lOwnersCorporationID
From Strata.dbo.OwnersCorporation OC
Left Join ComplianceDEMO.dbo.ComplianceItem CI on OC.lOwnersCorporationID = CI.OwnersCorporationID
Where CI.OwnersCorporationID IS NULL
AND OC.bManaged = 'Y'
Кстати, я надеваю не заботятся о производительности, так как этот запрос будет выполняться только один раз и использоваться как часть оператора вставки для создания отсутствующих записей.
ОБНОВЛЕНИЕ
Очевидно, мои данные более сложны, чем эти, но это должно дать вам представление.
Table Definition
Ownerscorporation Table
OwnersCorporationID INT PK
PlanNumber Varchar(10)
ComplianceItem Table
ComplianceItemID INT PK
ComplianceTypeID INT FK
OwnersCorporationID INT FK
ComplianceType Table
ComplianceTypeID INT PK
Name varchar(50)
Test Data
Owners Corporation Table
ID PlanNumber
===============================================
1 1001
2 1002
3 1003
Compliance Item Table
ComplianceItemID ComplianceTypeID OwnersCorporationID
==================================================================
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 1 2
7 2 2
8 4 2
9 1 3
10 2 3
11 3 3
Compliance Type Table
==================================================================
ComplianceTypeID Name
1 Asbestos Report
2 Capital Works Fund
3 Anchor Point Compliance
4 Window Lock Compliance
5 Pool Compliance
The Problem
=========================
Probably easier in two parts.
Find all the OwnersCorporations That Don't have a Compliance type of 4
Find all the OwnersCorporations That Don't have a Compliance type of 5
Expected Results
=========================
Part 1
OwnersCorporationID
3
Part 2
OwnersCorporationID
2
3
ОБНОВЛЕНИЕ 2
Похоже, ответ Мэтта в комментариях работал над тестовыми данными.
Select OwnersCorporationID
From OwnersCorporationTable
Where OwnersCorporationID Not In
(
Select OwnersCorporationID
From ComplianceItemTable
Where (ComplianceTypeID =5 )
Возвращено 2 и 3
И
Select OwnersCorporationID
From OwnersCorporationTable
Where OwnersCorporationID Not In
(
Select OwnersCorporationID
From ComplianceItemTable
Where (ComplianceTypeID =4 )
Возвращено 3 Мне нужно будет запустить его в две части, когда я буду использовать его для создания отсутствующих записей. Я постараюсь преобразовать его для работы с моими реальными данными. Надеюсь, я не слишком упростила это :) Спасибо за вашу помощь, Мэтт. Если вы хотите получить баллы, пожалуйста, оставьте это как ответ.