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에 추가) –