У меня есть запрос MySQL, который использует 3 таблицы с 2 внутренними соединениями. Затем я должен найти максимум группы из этого вывода запроса. Объединить их обоих выше моего понимания. Могу ли я решить проблему, сохранив вывод первого сложного запроса во временную таблицу, дать ей имя и затем использовать эту таблицу в новом запросе? Это сделает код более управляемым. Спасибо за помощь.
Как я могу сохранить вывод запроса во временную таблицу и использовать эту таблицу в новом запросе?
Ответы (1)
Это очень просто:
CREATE TEMPORARY TABLE tempname AS (
SELECT whatever, whatever
FROM rawtable
JOIN othertable ON this = that
)
Временная таблица исчезнет, когда ваше соединение закроется. Временная таблица содержит данные, которые были захвачены во время ее создания.
Вы также можете создать представление, например так.
CREATE VIEW viewname AS (
SELECT whatever, whatever
FROM rawtable
JOIN othertable ON this = that
)
Представления являются постоянными объектами (они не исчезают при закрытии соединения), но они извлекают данные из базовых таблиц в момент их вызова.
person
O. Jones
schedule
07.03.2014
Извините за беспокойство, вы рекомендуете использовать временные таблицы mysql в такой ситуации (https://stackoverflow.com/questions/45164132/why-i-cant-use-the-name-of-the-derived-tablesubquery-result-again) ?
- person Accountant م; 18.07.2017
@ Бухгалтер Короче говоря, нет. В универсальном MySQL временные таблицы почти бесполезны из-за их ограничений. MariaDB 10.2 (форк MySQL) имеет общие табличные выражения, которые являются хорошим способом решения этой проблемы. Или используйте представление, чтобы не вводить подзапрос дважды.
- person O. Jones; 18.07.2017
CREATE TEMP TABLE
? - person David Wilkins   schedule 08.03.2014