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,,

結果セットの単一の列に DISTINCT を指定できないのは残念です。

4

1 に答える 1

1

さて、派生テーブルの作成を繰り返さずに、あなたがしようとしていることを行う方法はありません。

クエリadsが非常に高価な場合は、次のようなインデックスを追加してみてください。

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

そのインデックスを追加した後、クエリに時間がかかりすぎる場合は、このデータを格納するテーブルを作成し、そのテーブルをスポットごとにクエリすることをお勧めします。

データによっては、いじってGROUP BY同様の結果を得ることができます。

于 2012-04-15T17:18:01.120 に答える