Mysql LEFT JOIN如何工作

时间:2016-02-26 17:25:07

标签: mysql

以下表(在其文档中使用mysql)为例:

+---------+--------+-------+
| 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;

是的,它可以正确返回表格的最后一列(具有最高价格的那一列) 有了这个查询,我真的不明白它是如何工作的(不是左连接),而是为什么我们有一篇IS NULL的文章。

我想如果我们想要在没有交叉点的情况下进行左连接,我们会使用:

SELECT * from A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL.<br>

但是如果我们总是有一个该列的值,为什么我们有b.key为空?

1 个答案:

答案 0 :(得分:0)

嗯,您实际上是通过比较来加入两个表:s1.price < s2.price

因此,表1的每一行都与价格较高的表2的所有行匹配。由于使用LEFT JOIN,它也将返回表1中没有表2中匹配行的行。由于我们正在寻找最高价格,因此这一行正是我们所寻找的,价格最高的一个,表2(s2.article = NULL)中的匹配行没有更高的一行。