我正在尝试在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
)
)
);
但是我无法将它组合起来生成一个允许我返回先前给定要求的查询。 如果有人能帮我实现预期的结果,我将不胜感激。
答案 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
)
)
);