【发布时间】:2016-12-10 22:23:17
【问题描述】:
我正在浏览 mysql 文档,在 the common queries section 下,他们提到了如何使用 LEFT JOIN 获取表的最大列值。这是表格:
SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
这是查询:
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price < s2.price
WHERE s2.article IS NULL;
有几件事情我不能正面或反面。
首先,没有任何LIMIT 1 语句或命令(这违背了JOIN 的目的),我不明白它如何只能返回一行(假设LEFT JOIN 是返回所有的LEFT OUTER JOIN左表中的行根据w3 Schools)。
其次,我不明白s1.price < s2.price 的语义。这是否是说,“从s2 中选择所有行,其中声明s1.price < s2.price 为真(如果是,那么上面的w3 学校链接对于mysql 不正确)?即LEFT JOIN 是LEFT INNER JOIN?
最后,WHERE s2.article IS NULL 对我来说毫无意义,因为表中的每条记录都有一个 article 属性(特别是因为没有模棱两可的 0000 文章)。
【问题讨论】:
-
where s2.article is null表示(假设该字段不为空),s1 的详细信息只会在表中没有高于它的价格的项目中找到。