MySQL:表别名不存在

3
我有一个数据库表格(我称之为Test),名为Items,其中有一个int列名为itemID和一个decimal(8,2)列名为currently,分别表示物品的唯一ID和物品的当前出价。由于可能尚未对物品进行竞标,因此currently列可以为NULL。
我的目标是获取具有至少一个竞标的最高当前出价的物品的itemID。我有一个MySQL查询如下:
select itemID
from (select itemID from Items where numBids > 0) as b
where currently = (select max(currently) from b);

当我在MySQL中执行此操作时,出现错误提示:
ERROR 1146 (42S02): Table 'Test.b' doesn't exist

有人能解释一下这里发生了什么吗?我已经有一段时间没用mysql了,所以我有点生疏。我是否需要将Items与自身连接才能完成这样的操作?任何帮助都将不胜感激。
2个回答

4
别名“b”并没有被最后一个子查询看到。不要使用那个复杂的查询,而是使用:
SELECT itemID
FROM Items
WHERE numBids > 0
ORDER BY currently DESC 
LIMIT 1

处理多个物品当前出价最高的情况:

SELECT itemID
FROM Items
WHERE numBids > 0
  AND currently =
      ( SELECT MAX(currently)
        FROM Items
        WHERE numBids > 0 
      )

啊,这简单多了!我似乎从来没有想到过这么清晰的方法。非常感谢。 - Nick Van Hoogenstyn
我有一个问题。这无法处理多个物品具有最高当前出价的情况。是否有简单的解决方法来获取所有具有最高当前出价的物品? - Nick Van Hoogenstyn

1
问题在于您不能在“where”子句的“select”中使用“b”。

啊,谢谢。这需要完全重新思考我的查询结构吗? - Nick Van Hoogenstyn
尝试从Items b中选择b.itemID,其中b.numBids> 0并且b.currently =(从Items a中选择a.currently的最大值,其中a.itemID = b.itemID并且a.numBids> 0); - carpii
carpii:谢谢,但是那个查询在我的机器上执行时间太长了。 - Nick Van Hoogenstyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接