Я пытаюсь сделать следующий запрос в MySQL:
Найдите идентификаторы поставщиков, которые поставляют все детали красным или зеленым.
Структура таблиц будет следующей:
proveedores(ID: int (PK), nombre: nvarchar, direccion: nvarchar)
partes(ID: int (PK), nombre: nvarchar, color: nvarchar)
catalogo(proveedores_ID: int (FK), partes_ID: int (FK), costo: double)
И мне удалось сделать запросы, которые позволяют мне видеть идентификаторы поставщиков, которые распределяют все части красного или зеленого цвета в зависимости от ситуации.
Запрос с использованием "красного" или "зеленого" заключается в следующем:
SELECT DISTINCT C.proveedores_ID FROM fabrica.catalogo C
WHERE NOT EXISTS (
SELECT P.ID FROM fabrica.partes P
WHERE P.color = "red" AND ( NOT EXISTS (
SELECT C1.proveedores_ID FROM fabrica.catalogo C1
WHERE C1.proveedores_ID = C.proveedores_ID AND C1.partes_ID = P.ID
)
)
);
но я не мог объединить его для генерации запроса, который позволяет мне вернуть ранее заданное требование. Я был бы признателен, если кто-то может помочь мне достичь ожидаемого результата.
Вы можете присоединиться к двум условиям NOT EXISTS
с OR
чтобы получить поставщиков, для которых нет красных частей, которые они не продали, или нет зеленых частей, которые они не продали:
SELECT DISTINCT C.proveedores_ID FROM fabrica.catalogo C
WHERE NOT EXISTS (
SELECT P.ID FROM fabrica.partes P
WHERE (P.color = "red")
AND ( NOT EXISTS (
SELECT C1.proveedores_ID FROM fabrica.catalogo C1
WHERE C1.proveedores_ID = C.proveedores_ID
AND C1.partes_ID = P.ID
)
)
) OR NOT EXISTS (
SELECT P.ID FROM fabrica.partes P
WHERE (P.color = "green")
AND ( NOT EXISTS (
SELECT C1.proveedores_ID FROM fabrica.catalogo C1
WHERE C1.proveedores_ID = C.proveedores_ID
AND C1.partes_ID = P.ID
)
)
);
OR
? Должны ли они включать поставщиков, которые продали все красные и зеленые?