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

标签 mysql sql database

我在 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/

相关文章:

python - 用于 Python 的 Git 支持的 ORM?

Python aiomysql 在我的查询参数周围放置了一组引号

mysql - 使用 MySQL workbench 向 MySQL 数据库中插入阿拉伯字符

子查询 where 子句中的 MYSQL 别名

mysql - 选择具有最大字符串长度的结果

java - Hibernate 查询 "or condition"将不起作用

mysql日期时间查询求助?

SQL - 使用 COUNT() 作为 WHERE 条件

sql - 在 SQL 表中插入日期值

python - 在 Python 中,如果我有一个 unix 时间戳,我如何将它插入到 MySQL 日期时间字段中?