MySQL文檔說:「您不能在同一查詢中多次引用TEMPORARY表。」如何在同一查詢中多次引用TEMPORARY表?
我知道這已被問過。但我無法找到以下的具體解決方案。
我做了預選到一個臨時表
CREATE TEMPORARY TABLE preselection AS SELECT ...;
現在我想要做一些(約20或甚至30)工會
(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) – 2012-02-20 16:33:33
你可以顯示完整的真實查詢嗎?它可以幫助我們提出一種解決方案,不需要多次添加臨時表。 – JohnFx 2012-02-20 16:42:34
也許這是個好主意。在這裏,我的完整查詢,我真的不知道如何以不同的方式做到這一點。 (添加到帖子) – 2012-02-23 15:32:55