Объединить результаты двух запросов в один

0

Я пытаюсь сделать следующий запрос в 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
                                                         )
                                            )
                 ); 

но я не мог объединить его для генерации запроса, который позволяет мне вернуть ранее заданное требование. Я был бы признателен, если кто-то может помочь мне достичь ожидаемого результата.

Теги:
database
mysql-workbench
relational-database

1 ответ

0

Вы можете присоединиться к двум условиям 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
                          )
                  )
);
  • 0
    Разве это не предоставило бы всем поставщикам, которые поставляют все детали красным И зеленым, а не все детали красным ИЛИ зеленым?
  • 0
    Вы правы, я неверно истолковал вопрос и соответственно изменил ответ, но это вызывает новый вопрос, должно ли это быть эксклюзивным или инклюзивным OR ? Должны ли они включать поставщиков, которые продали все красные и зеленые?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню