我遇到此查询以获得具有最大值的行。你能解释一下这是如何工作的吗
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
当没有这样的记录存在的时候。因此查询返回具有最大价格的记录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句