我正在浏览mysql文档,并且在the common queries section之下,他们提到了如何使用LEFT JOIN获取表的最大列值。这里的表:如何使用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的详细信息将仅在没有高于表中的价格的项目中找到。 – TZHX