План A:
На
A TEMPORARY TABLE
нельзя ссылаться более одного раза. Итак, постройте постоянный стол и DROP
, когда закончите. (Если у вас может быть несколько соединений, делающих одно и то же, будет сложно убедиться, что вы не используете одно и то же имя таблицы.)
План Б:
С MySQL 8.0 вы можете сделать
WITH T AS ( SELECT ... )
SELECT ... FROM T ORDER BY col1
UNION ...
План C:
Если это возможно сделать:
SELECT id FROM A
ORDER BY col1 LIMIT 10
Вы можете использовать это как «производную» таблицу внутри
(SELECT * FROM A INNER JOIN B ... AND SOME COMPLEX WHERE CONDITIONS)
что-то вроде
SELECT A.*, B.*
FROM ( SELECT id FROM A
ORDER BY col1 LIMIT 10 ) AS x1
JOIN A USING(id)
JOIN B ... AND SOME COMPLEX WHERE CONDITIONS
Аналогично для двух других SELECTs
, затем UNION
их вместе.
Еще лучше, UNION
вместе 3 набора ids
, , затем JOIN
до A
и B
один раз .
Это может иметь преимущество при работе с меньшим количеством строк.