如何比较MySQL中同一字段的两个不同值?

时间:2015-09-24 21:24:58

标签: mysql sql database

我在MySQL中有3个表,代表通过目录销售零件的供应商:

供应商(sid,sname,地址),sid是主键(整数)

部件(pid,pname,color),pid是主键(整数)

目录(sid,pid,cost),sid和pid是主键

现在我正在尝试选择供应两种不同颜色部分的供应商的名称。到目前为止,我只是想知道如何选择供应商的sid?使用以下代码销售多个零件:

SELECT sid
FROM catalog
GROUP BY sid
HAVING COUNT(sid) > 1;
然而,我对如何从特定供应商中选择两个零件并比较它们的颜色值感到茫然。看起来我需要某种子查询,但我不确定如何去做。我们非常感谢任何正确方向的指导。

1 个答案:

答案 0 :(得分:4)

为此,您可以使用自连接,声明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

即使您想使用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§