2011-10-24 59 views
3

所以我有一個表在我的數據庫(我將稱之爲測試)。該表名爲Items,並具有名爲itemID的int列和名爲currently的小數(8,2)列。它們分別表示物品的唯一ID和物品的當前出價。當前列可以爲NULL,因爲可能還沒有出價。mysql:表別名不存在

我的目標是獲取具有至少一個出價的當前最高出價的商品的商品ID。我有一個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,所以我生疏了。爲了完成這樣的事情,我是否必須與自身進行項目連接?任何幫助,將不勝感激。

回答

1

問題是你不能使用where clausole的select裏面的b

+0

啊,謝謝。這是否需要重新考慮我的查詢結構? –

+0

嘗試從項目b中選擇b.itemID,其中b.numBids> 0和b.currently =(從項目a中選擇max(a.currently),其中a.itemID = b.itemID和a.numBids> 0); – carpii

+0

carpii:謝謝,但是這個查詢需要很長時間才能執行(至少在我的機器上)。 –

4

最後一個子查詢中沒有看到別名「b」。 insted的使用是複雜的查詢中使用

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 
    ) 
+0

啊,這簡單得多!我似乎無法用這些乾淨的方式來思考它們。非常感謝。 –

+0

不客氣! –

+0

我確實有一個問題。這不處理多個項目具有最高當前出價的情況。是否有一個簡單的解決方法來獲得當前最高出價的所有項目? –