以下两个MySQL语句有什么区别?
select article, dealer, price from shop s1 where price=(select max(**s2.price**) from shop s2
where s1.article = s2.article)
order by article;
select article, dealer, price from shop s1 where price=(select max(**s1.price**) from shop s2
where s1.article = s2.article)
order by article;
这两者的查询结果不同,我只是无法理解这两者的不同之处。请帮助我理解它,非常感谢。
第二个是相关的子查询,但返回的值与外部查询中的s1.price
相同。 由于用于内部查询和外部查询的表相同,因此它在功能上等效于:
where price is not null and article is not null
也就是说,任何具有有效价格的有效文章都将与子查询的结果匹配。
第一个是相关的子查询,它获取每篇文章的最高价格,然后返回外行。 使用正确的索引,这通常是编写此类查询的最有效方法。