将两个查询的结果合并为一个

时间:2018-04-09 17:38:59

标签: mysql sql database relational-database mysql-workbench

我正在尝试在MySQL中进行以下查询:

查找以红色或绿色提供所有部件的供应商的ID。

表的结构如下:

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)

我已设法查询,允许我查看分发红色或绿色部分的供应商的ID,视情况而定。

查询使用" red"或"格林"是这样的:

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
                                                         )
                                            )
                 ); 

但是我无法将它组合起来生成一个允许我返回先前给定要求的查询。 如果有人能帮我实现预期的结果,我将不胜感激。

1 个答案:

答案 0 :(得分: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
                          )
                  )
);