Как я могу ссылаться на ВРЕМЕННУЮ таблицу более одного раза в одном запросе?

в документации MySQL говорится: «Вы не можете ссылаться на ВРЕМЕННУЮ таблицу более одного раза в одном запросе»

. Я знаю, что об этом уже спрашивали. Но я не могу найти конкретного решения для следующего.

Я делаю предварительный выбор во временной таблице

CREATE TEMPORARY TABLE preselection AS SELECT ...;

, теперь я хочу сделать несколько (около 20 или даже 30) объединений

(SELECT FROM preselection ...)
UNION
(SELECT FROM preselection ...)
UNION
......
UNION
(SELECT FROM preselection ...)

Я мог бы сделать 20 или 30 копий предварительного выбора и сделать каждый выбор в каждой таблице, но если Я правильно понимаю, что это то же самое, что вызывать предварительный выбор-запрос выше в каждом SELECT внутри цепочки UNION в качестве подзапроса.

Есть ли способ обойти эту проблему?

Приветствую,

Крис

Полный запрос:

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`;
5
задан Chris Pillen 23 February 2012 в 15:37
поделиться