2012-04-15 11 views
1

ユニオンでサブクエリを参照する方法はありますか?ユニオンのサブクエリ参照

私は、次のような何かをしようとしていて、一時テーブルを避けたいが、一度だけそれを行うには、それは理にかなっているように、サブクエリがはるかに大きいデータセットから供給されます。..

SELECT * FROM (SELECT * FROM ads WHERE state='FL' AND city='Maitland' AND page='home' ORDER BY RAND()) AS sq WHERE spot = 'full-banner' LIMIT 1 
UNION 
SELECT * FROM sq WHERE spot = 'leaderboard' LIMIT 1 
UNION 
SELECT * FROM sq WHERE spot = 'rectangle1' LIMIT 1 
UNION 
SELECT * FROM sq WHERE spot = 'rectangle2' LIMIT 1 
.... etc,, 

結果セットの1つの列に対してDISTINCTを指定することはできません。

答えて

1

派生テーブルの作成を繰り返すことなく、何をしようとしているのかわかりません。

adsを照会することは本当に高価であるならば、あなたは以下のようにインデックスを追加してみてください必要があります。そのインデックスを追加した後、クエリがあまりにも多くを取る場合

alter table ads add index (state, city, page, spot); 

、その後、私は、このデータを格納するテーブルを作成するようにお勧めしたいと各スポットのテーブルを照会します。

データによっては、GROUP BYで遊んでも同様の結果が得られます。

+0

tblは最初のサブクエリの参照に過ぎないためです。たぶん名前はちょっと混乱しているかもしれません。 ads表は大きいですが、サブクエリの後には約90行しかありません。混乱を避けるためにエイリアス名を更新します。 – christian

+0

入手しました。私の答えを更新しました。 –

+1

私の最初のテストは、以下が私が望むことをしていることを示しています.... SELECT * FROM(ここから州= 'FL' AND city = 'Maitland' ORDER BY RAND())sq GROUP BY sq .spot ... GROUP BYは1つの節ごとに1つの結果しか返しません。私はORDER BYと似ていると思っていました。ありがとう – christian

関連する問題