У меня есть постоянная проблема с запросами, которые не просто удаляют одну запись, которая не соответствует критериям, но удаляют все записи, основанные на некоторой другой группировке.Например, для таблицы со следующим:
Name ProdType Prod Spoiled DateReceived
Jack Fruit Apple N 1/1/2019
Jack Fruit Pear Y 1/1/2018
Jack Fruit Orange N 1/1/2019
Jack Vegetable Okra N 1/1/2019
Jack Vegetable Squash N 1/1/2018
Jill Fruit Apple N 4/1/2019
Jill Fruit Cherry N 4/1/2019
Jill Vegetable Corn Y 4/1/2019
Jill Vegetable Okra N 4/1/2019
мой запрос может заключаться в том, чтобы найти, у кого были фрукты, где ни один из фруктов не был испорчен.
До сих пор я былиспользуя вложенные операторы select, но по мере добавления критериев становится все труднее.
SELECT NAME
,PRODTYPE
,PROD
,SPOILED
,DATEREC
FROM inventory
WHERE NAME in (
SELECT DISTINCT Name from (SELECT Name FROM inventory
WHERE ProdType = 'fruit' as Data)
WHERE Name NOT IN (SELECT Name from inventory WHERE Name in (
SELECT Name
WHERE Spoiled = 'Y'))
)
В примере с Джеком и Джилл мой запрос вернул бы 2 результата для Джилл (1 для каждого фрукта) и ни одного дляДжек.
Обычно участвуют как минимум две таблицы.Я сталкиваюсь с проблемами (обычно безрезультатно, или я даже не могу получить прошлые ошибки при выполнении запроса), когда добавляю критерии, например, нормально, если он испорчен, если он был получен до даты X, а также при добавлении дополнительных таблиц.
Это способ вложения выборок для создания списков с последующим поиском наилучшего способа или SQL предлагает что-то лучше?
Спасибо.