gpt4 book ai didi

mysql - 如何使用 JOIN 对表进行排序?

转载 作者:行者123 更新时间:2023-11-29 06:06:41 24 4
gpt4 key购买 nike

我正在浏览 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 JOINLEFT INNER JOIN 吗?

最后,WHERE s2.article IS NULL对我来说完全没有意义,因为表中的每条记录都有一个 article属性(特别是因为没有模棱两可的 0000 文章)。

最佳答案

加盟条件s1.price < s2.price意味着每个 s1行将加入每个 s2价格较高的行。

这意味着对于表中的行 s1最高价 (19.95) 否 s2行将匹配。因为它在外部加入不匹配的s1无论如何都会返回行,但是所有 s2列将设置为 null .

where s2.article is null然后丢弃除该行之外的所有行。您可能会发现在该阶段之前检查结果很有用

SELECT s1.article,
s1.dealer,
s1.price,
s2.article,
s2.dealer,
s2.price
FROM shop s1
LEFT JOIN shop s2
ON s1.price < s2.price;

您将看到 1.25 s1行与 6 s2 连接行,10.99 行有 1 行,而 19.95 行根本没有。

请注意,不能保证只返回一行,如果多行与最高价格并列,所有这些都将被返回。

关于mysql - 如何使用 JOIN 对表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com