我在 MySQL 中有 3 个表代表通过目录销售零件的供应商:
Suppliers(sid, sname, address),sid为主键(整数)
Parts(pid, pname, color),pid为主键(整数)
Catalog(sid, pid, cost),sid和pid为主键
现在我正在尝试选择供应两种不同颜色零件的供应商的名称。到目前为止,我只设法弄清楚如何选择销售更多的供应商的 sid比具有以下代码的部分:
SELECT sid
FROM catalog
GROUP BY sid
HAVING COUNT(sid) > 1;
但是,我不知道如何从特定供应商处选择两个零件并比较它们的颜色值。似乎我需要某种子查询,但我不确定具体如何去做。任何正确方向的指导将不胜感激。
最佳答案
为此,您可以使用自连接,声明 PID 必须相同但颜色必须不同,类似于以下内容:
SELECT s.sid, s.sname, p.*
FROM (
SELECT DISTINCT a.pid, a.color, b.color
FROM parts AS a
JOIN parts AS b ON b.pid == a.pid AND b.color <> a.color
) AS p
JOIN catalog AS c ON c.pid == p.pid
JOIN suppliers AS s ON s.sid == c.sid
不需要 having 子句,即使您想使用 GROUP BY 来完成同样的事情:
SELECT s.sid, s.sname, p.*
FROM (
SELECT DISTINCT pid, color
FROM parts
GROUP BY pid, color
) AS p
JOIN catalog AS c ON c.pid == p.pid
JOIN suppliers AS s ON s.sid == c.sid
无论哪种情况,周围的查询和连接都应该能够为您提供准确的列表。
希望对您有所帮助。
-C§
关于mysql - 如何比较 MySQL 中同一字段的两个不同值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32771176/