【问题标题】:MySQL table alias does not workMySQL 表别名不起作用
【发布时间】:2016-11-04 16:27:53
【问题描述】:

所以我在这段代码中使用'as'命令

select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,NUMBER_OF_ORDERS  
from(
select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,count(CUSTOMER_ID) as NUMBER_OF_ORDERS
from customer as C
right join
customer_hotel as CH on CH.CUSTOMER_ID = C.ID
group by(CH.CUSTOMER_ID)
) as O
where NUMBER_OF_ORDERS = (select max(NUMBER_OF_ORDERS) from O);

它说:表“company.o”不存在。 但是当我这样做时

select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,NUMBER_OF_ORDERS  
from(
select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,count(CUSTOMER_ID) as NUMBER_OF_ORDERS
from customer as C
right join
customer_hotel as CH on CH.CUSTOMER_ID = C.ID
group by(CH.CUSTOMER_ID)
) as O
where NUMBER_OF_ORDERS = (select max(NUMBER_OF_ORDERS) 
from(
select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,count(CUSTOMER_ID) as NUMBER_OF_ORDERS
from customer as C
right join
customer_hotel as CH on CH.CUSTOMER_ID = C.ID
group by(CH.CUSTOMER_ID)
) as O);

它工作正常。有什么建议吗?

【问题讨论】:

  • 对不起,但我认为整个事情有点混乱(包括你认为“正常工作”的部分)。见meta.stackoverflow.com/questions/333952/…
  • 你想达到什么目的?
  • @CGritton 是的。它是
  • @CGritton 不是真的,它只有在只有一行最大值存在时才有效,但如果有 3 行最大值它只会返回一个。
  • @GiorgiCercvadze,啊,明白了。那么你的所作所为是有道理的。

标签: mysql sql table-alias


【解决方案1】:

为子查询分配别名并不意味着它可以完全像表一样对待。

在第一个查询中,mysql 无法知道select max(NUMBER_OF_ORDERS) from O 中的O 不是表。所以这就是它对待它的方式,因此是错误的。

company 是您的架构名称吗?

顺便说一句,也许您可​​以使用以下方法返回相同的信息:

select PERSONAL_ID,NAME,SURNAME,BIRTH_DATE,count(CUSTOMER_ID) as NUMBER_OF_ORDERS
from customer as C
right join
customer_hotel as CH on CH.CUSTOMER_ID = C.ID
group by(CH.CUSTOMER_ID)
order by count(CUSTOMER_ID) desc
limit 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2011-09-21
    • 2012-12-17
    • 2015-01-28
    • 2012-07-19
    相关资源
    最近更新 更多