2011-10-24 45 views
3

私はデータベースにテーブルを持っています(これはTestと呼ばれます)。テーブルの名前はItemsで、itemIDという名前のカラムとcurrentlyという名前の10進(8,2)カラムがあります。それらは、項目の一意のIDおよび項目の現在の入札価格をそれぞれ表します。アイテムにまだ入札されていない可能性があるため、現在の列はNULLにすることができます。mysql:テーブルエイリアスが存在しません

私の目標は、少なくとも1回の入札が行われた現在の最高入札価格のアイテムの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を使用していないので、私は錆びています。このようなことを成し遂げるためには、アイテムとの結合が必要ですか?どんな助けもありがとう。

答えて

1

whereクラウスルのselectの内部にbを使用できないという問題があります。

+0

ああ、ありがとうございました。これは私のクエリの構造の完全な再考を必要としますか? –

+0

項目bからb.numBids> 0およびb.currently =を選択してみてください(a.itemID = b.itemIDおよびa.numBids> 0の項目aからmax(a.currently)を選択します)。 – carpii

+0

carpii:ありがとうございますが、そのクエリの実行には時間がかかりすぎます(少なくとも私のマシンでは)。 –

4

エイリアス "b"は最後のサブクエリには見えません。複数の項目が最も高い現在の入札状況持って対処するには

SELECT itemID 
FROM Items 
WHERE numBids > 0 
ORDER BY currently DESC 
LIMIT 1 

その複雑なクエリを使用を使用するInsted:

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

ああ、これははるかに簡単です!私は決してこれらのきれいな方法でそれらを考えることができないようです。どうもありがとう。 –

+0

よろしくお願いします! –

+0

しかし私は質問があります。これは、複数の商品が現在の入札価格が最も高い状況を処理しません。最高の現在の入札単価を持つすべてのアイテムを取得する簡単な回避策はありますか? –

関連する問題