MySQL 5.7版本说明
任务:针对每一件商品,找到价格最高的经销商或经销商。
这个问题可以用这样的子查询来解决:
SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1. price)article = s2.article)按文章排序;+---------+--------+-------+ | 文章| |经销商价格 | +---------+--------+-------+ | 0001 B | | 3.99 | | 0002 | | 10.99 | | 0003 | | 1.69加元| | 0004 | | 19.95 | +---------+--------+-------+
前面的示例使用了一个相关的子查询,这可能效率很低(请参阅13.2.10.7节,“相关子查询”).类中的不相关子查询是解决该问题的其他可能方法从
条款或左连接
.
不相关子查询:
选择s1。文章,经销商,s1。price FROM shop s1 JOIN (SELECT article, MAX(price) AS price FROM shop GROUP BY article) AS s2 ON s1。Article = s2。article AND s1。价格= s2。按商品订购价格;
左连接
:
选择s1。文章,s1.经销商,s1。从商店s1左加入商店s2上s1。Article = s2。article AND s1。价格< s2。WHERE s2的价格。article是NULL ORDER BY s1.article;
的左连接
工作的基础是当s1.price
在它的最大值时,没有s2.price
具有较大的值,因而相应s2.article
值是零
.看到第13.2.9.2节“JOIN子句”.