如何在同一查询中多次引用TEMPORARY表?

Chr*_*len 5 mysql union temp-tables

MySQL文档说:"你不能在同一个查询中多次引用TEMPORARY表."

我知道之前有人问过这件事.但我无法找到以下具体解决方案.

我正在预选一张临时表

CREATE TEMPORARY TABLE preselection AS SELECT ...;
Run Code Online (Sandbox Code Playgroud)

现在我想做一些(约20甚至30)工会

(SELECT FROM preselection ...)
UNION
(SELECT FROM preselection ...)
UNION
......
UNION
(SELECT FROM preselection ...)
Run Code Online (Sandbox Code Playgroud)

我可以制作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`;
Run Code Online (Sandbox Code Playgroud)

Mos*_*cho 4

我认为错误消息很明确:您不能使用单个临时表来做到这一点。创建数据视图而不是临时表可以解决问题吗?

mysql 中的视图