MySQLのドキュメントでは、「同じクエリで複数回TEMPORARYテーブルを参照することはできません。同じクエリで何度もTEMPORARYテーブルを参照できますか?
これは以前に尋ねられました。しかし、私は以下の特定の解決策を見つけることができません。
私は今、私はいくつかの(20あるいは30の周りを)やるたい一時テーブルに
CREATE TEMPORARY TABLE preselection AS SELECT ...;
を事前選択をやっている労働組合
(SELECT FROM preselection ...)
UNION
(SELECT FROM preselection ...)
UNION
......
UNION
(SELECT FROM preselection ...)
私は事前選択の20のまたは30のコピーを作ることができます各テーブルでそれぞれを選択しますが、これを正しく理解すれば、UNIONチェーン内のすべてのSELECTでサブクエリとして上記の事前選択クエリを呼び出すのと同じことになります。
この問題を回避する方法はありますか?
挨拶、
クリス
全クエリ:
CREATE TEMPORARY TABLE preselection AS
(
SELECT id, title, chapter, date2, date, snid, max(score) FROM `movies`
WHERE
(
cluster is not NULL
)
AND
(
`date` <= '2012-02-20 05:20:00'
AND `date` > '2012-02-19 17:20:00'
AND (TIMEDIFF(date, date2) < '12:00:00')
)
GROUP BY cluster
)
UNION
(
SELECT id, title, chapter, date2, date, snid, score FROM `movies`
WHERE cluster IS NULL
AND
(
`date` <= '2012-02-20 05:20:00' AND `date` > '2012-02-19 17:20:00' AND (TIMEDIFF(date, date2) < '12:00:00')
)
);
(SELECT * FROM preselection WHERE snid=1 AND chapter LIKE '#A_OT%'
DESC LIMIT 4)
UNION
…
UNION
(SELECT * FROM preselection WHERE snid=19 AND chapter LIKE '#A_OT%'
LIMIT 4)
UNION
... for each chapter from A to J and every snid from 1 to 19 ...
UNION
(SELECT * FROM preselection WHERE snid=1 AND chapter LIKE '#J_OT%'
LIMIT 4)
UNION
…
UNION
(SELECT * FROM preselection WHERE snid=19 AND chapter LIKE '#J_OT%'
LIMIT 4)
ORDER BY `score` DESC, `date`;
[[MySqlで一時テーブルに複数回アクセスする]]の可能な複製(http://stackoverflow.com/questions/4078873/accessing-a -temporary-table-multiple-times-in-mysql) –
本当の完全なクエリを表示できますか?これは、一時テーブルを複数回追加する必要がない回避策のアイデアを思いつくのに役立ちます。 – JohnFx
多分それは良い考えです。ここで私の完全な質問、私は本当に別の方法でそれを行う方法がありません。 (POSTに追加) –