如何在 MySQL 中使用自连接查找列的最大值?
How to find Max value of a column using self join in MySQL?
问题是:
查找价格最高的打印机型号。结果集:型号、价格
数据库模式是:
打印机(代码、型号、颜色、类型、价格)
我想使用我自己编写的 join.The 查询来查找最高价格:
select model,price
from printer
where not exists
(
select p2.model,p2.price
from printer p1, printer p2
where p2.price<p1.price
)
子查询似乎是正确的,因为它不包括最高值,但整个查询给出的是空 table。
Link 的问题是:http://www.sql-ex.ru/learn_exercises.php#answer_ref
您没有正确编写相关子查询。您需要引用回您正在阅读的 table(即外部查询),而不是将其再次包含在子查询中:
SELECT model, price
FROM printer p1
WHERE NOT EXISTS (SELECT * FROM printer p2 WHERE p2.price > p1.price)
请注意,这不是自连接,这是相关子查询。要使用自连接编写此函数,请使用 LEFT JOIN
并检查连接 table 中的值是否为 NULL
:
SELECT p1.model, p1.price
FROM printer p1
LEFT JOIN printer p2 ON p2.price > p1.price
WHERE p2.model IS NULL
另请注意,正如@kmoser 在评论中指出的那样,您可以更简单地使用 ORDER BY
和 LIMIT
:
SELECT model, price
FROM printer
ORDER BY price DESC
LIMIT 1
SQLFiddle 上所有三个查询的 Demo。
问题是: 查找价格最高的打印机型号。结果集:型号、价格
数据库模式是: 打印机(代码、型号、颜色、类型、价格)
我想使用我自己编写的 join.The 查询来查找最高价格:
select model,price
from printer
where not exists
(
select p2.model,p2.price
from printer p1, printer p2
where p2.price<p1.price
)
子查询似乎是正确的,因为它不包括最高值,但整个查询给出的是空 table。 Link 的问题是:http://www.sql-ex.ru/learn_exercises.php#answer_ref
您没有正确编写相关子查询。您需要引用回您正在阅读的 table(即外部查询),而不是将其再次包含在子查询中:
SELECT model, price
FROM printer p1
WHERE NOT EXISTS (SELECT * FROM printer p2 WHERE p2.price > p1.price)
请注意,这不是自连接,这是相关子查询。要使用自连接编写此函数,请使用 LEFT JOIN
并检查连接 table 中的值是否为 NULL
:
SELECT p1.model, p1.price
FROM printer p1
LEFT JOIN printer p2 ON p2.price > p1.price
WHERE p2.model IS NULL
另请注意,正如@kmoser 在评论中指出的那样,您可以更简单地使用 ORDER BY
和 LIMIT
:
SELECT model, price
FROM printer
ORDER BY price DESC
LIMIT 1
SQLFiddle 上所有三个查询的 Demo。