Как я могу сохранить вывод запроса во временную таблицу и использовать эту таблицу в новом запросе?

У меня есть запрос MySQL, который использует 3 таблицы с 2 внутренними соединениями. Затем я должен найти максимум группы из этого вывода запроса. Объединить их обоих выше моего понимания. Могу ли я решить проблему, сохранив вывод первого сложного запроса во временную таблицу, дать ей имя и затем использовать эту таблицу в новом запросе? Это сделает код более управляемым. Спасибо за помощь.


person user781486    schedule 07.03.2014    source источник
comment
Вы пробовали CREATE TEMP TABLE?   -  person David Wilkins    schedule 08.03.2014
comment
вы можете сделать все это в одном запросе, отправьте то, что вы пробовали до сих пор. если вы хотите создавать временные таблицы, вы можете, но 2 внутренних соединения не так уж много, чтобы требовать временную таблицу   -  person Sam    schedule 08.03.2014


Ответы (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
comment
Извините за беспокойство, вы рекомендуете использовать временные таблицы mysql в такой ситуации (https://stackoverflow.com/questions/45164132/why-i-cant-use-the-name-of-the-derived-tablesubquery-result-again) ? - person Accountant م; 18.07.2017
comment
@ Бухгалтер Короче говоря, нет. В универсальном MySQL временные таблицы почти бесполезны из-за их ограничений. MariaDB 10.2 (форк MySQL) имеет общие табличные выражения, которые являются хорошим способом решения этой проблемы. Или используйте представление, чтобы не вводить подзапрос дважды. - person O. Jones; 18.07.2017