我想知道为什么下面这个查询无效?
select * from shop where price = max(select price from shop);
我试图获取shop表中的最大价格列,所以在where子句中,我将价格与查询集中的最大价格进行比较,我知道max的语法不允许这样做,但是有什么理由不将查询集作为参数?
我知道max的语法不允许这样做,但是max不以查询集为参数有什么原因吗?
等式右边的表达式是无效的。max()
是一个集合函数,需要 select
ed. 这将是。
select * from shop where price = (select max(price) from shop);
这就给了你几行 shop
拔尖 price
如果有的话,还包括连带关系。
请注意,如果你不需要允许顶部连接,查询可以简化如下。
select * from shop order by price desc limit 1
为什么这个查询无效? 有两个原因。
第一, max()
不允许在 where
子句。 其次,你有一个子查询,它可以返回多个值--然而,这是不允许的,即使是聚合函数。
语句中的 max()
需要进入子查询,把它变成一个 标量子查询 -- 也就是返回一列和0或1行的子查询。
select s.*
from shop s
where s.price = (select max(s2.price) from shop s2);
如果你只想返回一行,一个更简单的方法是:
select s.*
from shop s
order by s.price desc
limit 1;
你可以反过来做
select * from shop where price = (select max(price) from shop);