我正在尝试在 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”或“Green”的查询是这样的:
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 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
)
)
);
关于mysql - 将两个查询的结果合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738633/