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

2vuwiymt  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我尝试在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,分发所有部分的红色或绿色视情况而定。
使用“红色”或“绿色”的查询如下:

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

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

xmq68pz9

xmq68pz91#

你可以加入两个 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
                          )
                  )
);

相关问题