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

标签 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”或“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/

相关文章:

php - 有什么最好的方法可以在 MySQL 中存储推文吗?

c# - 如何在 HTML 中向现有表格添加新行

mysql - 从引用的表中获取字符串

mysql - 遇到需要满足多个条件的 MySQL Join 问题

mysql - 在连接和子查询中合并的 SQL 查询返回 null

python - Redis python中的HashMap过期?

database - 从数据库行在 Golang 中创建一个 map

mysql - mysql中的复合主键

php - MySQLi 访问被 php 拒绝

java - 从 SQL 表中进行统计