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