mysql - 使用左连接和 'IS NULL'

标签 mysql left-join

我遇到这个查询来获取具有最大值的行。你能解释一下这是如何工作的

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
WHERE s2.article IS NULL;

转储:

CREATE TABLE `shop` (
`article` int(4) unsigned zerofill NOT NULL DEFAULT '0000',
`dealer` char(20) NOT NULL DEFAULT '',
`price` double(16,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`article`,`dealer`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `shop` VALUES 
(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);

最佳答案

查询根据谓词执行自连接:

s1.price < s2.price

因此,表中的每条记录都会连接到任何具有更高价格的记录。

WHERE 子句的谓词:

WHERE s2.article IS NULL
不存在此类记录时,

true。因此,查询返回具有最高价格的记录。

关于mysql - 使用左连接和 'IS NULL',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507159/

相关文章:

mysql - SQL LEFT JOIN 与另一列的 where 子句

mysql - 从两个表中选择带有左连接计数的计数

mysql - 将多个 mysql 查询作为 1 个查询运行

php - 通过php上传csv文件到MySQL数据库

mysql - impala 中的列值除以总行数

mysql - GROUP BY 和 LEFT JOIN 与同一张表中的 COUNT

php - 将逗号分隔的字符串拆分为多列到 db - php

mysql根据二级表中的行重新计算mysql中的列

php - SQL查询: Grouping results from two tables

mysql - 根据连接表的结果更新 MySQL 表