Это связано с хранимой процедурой SQL Server, над которой я работаю.
Проблема, которую необходимо решить: Выберите запись из таблицы 1, если запись с соответствующим идентификатором не существует в таблице 2 или не соответствует ожидаемым условиям
Этот пример - то, что я пытаюсь сделать с измененными именами таблиц.
Два стола: Персона , Материал
Выберите Персона. Имя
Условия:
- Если нет записи материала
- если между «7/1/18» и «6/30/19» нет материала, а Stuff.Status не «Черновик»
Пример данных:
TABLE Person
Person.PersonID, Person.Name
1, Frank
2, Tom
3, Barb
TABLE Stuff
Stuff.StuffID, Stuff.PersonID, Stuff.CreatedDate, Stuff.Status
1, 1, '7/30/18', 'Draft'
2, 2, '8/14/18', 'Submitted'
Ожидаемые результаты запроса
1. Frank
2. Barb
Я не могу понять, как правильно обрабатывать условия, упомянутые выше, чтобы показать правильный результат. Я пытался найти ответ, соответствующий тому, что мне было нужно, но ничто не подходило точно.
~~~ Обновление с рабочим решением ~~~
С помощью Брайана и Эрика мне удалось выяснить, что я делаю неправильно. Мои условия смутили меня, заставив думать, что мне нужно несколько наборов условий.
SELECT DISTINCT Person.Name
FROM Person
WHERE NOT EXISTS
(
SELECT 1 FROM Stuff
WHERE
Person.PersonID = Stuff.PersonID
AND Stuff.CreatedDate >= '2018-07-01'
AND Stuff.CreatedDate <= '2019-06-30'
AND Stuff.Status <> 'Draft'
)
В основном это сделало так, что все, что не соответствовало ожидаемым критериям, было возвращено, к чему я стремился, но смутило себя в мысли, что мне нужно больше.