Подтвердить что ты не робот

Mysql: Создать встроенную таблицу в оператор select?

Есть ли способ в MySql создать встроенную таблицу для подключения?

Что-то вроде:

SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT

который будет выводить

|  ID  |  CONTENT  |
| LONG | VARCHAR(1)|
+------+-----------+
|   1  |    'a'    |
|   2  |    'b'    |
|   3  |    'c'    |

и что я мог бы использовать в объединении следующим образом:

SELECT 
  MyTable.*,
  MyInlineTable.CONTENT
FROM
  MyTable
  JOIN 
    (SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT MyInlineTable)
  ON MyTable.ID = MyInlineTable.ID

Я понимаю, что могу сделать

SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c'

Но это кажется довольно злым

Я не хочу делать хранимую процедуру, потому что потенциально a, b, c могут изменяться при каждом запросе и размере данных. Также хранимая процедура должна быть сохранена в базе данных, и я не хочу изменять базу данных только для этого. Вид - это одно и то же.

То, что я действительно ищу, - это то, что делает SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' с более сильным синтаксисом.

4b9b3361

Ответ 1

Единственные способы, которыми я могу помнить сейчас, - это использовать UNION или создать TEMPORARY TABLE и вставить в него эти значения. тебя это устраивает?


TEMPORARY_TABLE (проверено и работает):

Создание:

CREATE TEMPORARY TABLE MyInlineTable (id LONG, content VARCHAR(1) );

INSERT INTO MyInlineTable VALUES
(1, 'a'),
(2, 'b'),
(3, 'c');

Применение:

SELECT 
  MyTable.*,
  MyInlineTable.CONTENT
FROM
  MyTable
  JOIN 
    SELECT * FROM MyInlineTable;
  ON MyTable.ID = MyInlineTable.ID

TEMPORARY_TABLES службы TEMPORARY_TABLES (ссылка):

Временные таблицы автоматически удаляются, когда они выходят за пределы области видимости, если только они не были явно опущены с помощью DROP TABLE:

,

Все остальные локальные временные таблицы автоматически отбрасываются в конце текущего сеанса.

,

Глобальные временные таблицы автоматически отбрасываются, когда сеанс, который создал таблицу, заканчивается, и все остальные задачи перестали ссылаться на них. Связь между задачей и таблицей поддерживается только для жизни одного оператора Transact-SQL. Это означает, что глобальная временная таблица отбрасывается при завершении последнего оператора Transact-SQL, который активно ссылался на таблицу при завершении сеанса создания. '