Значение MariaDB INSERT как COLUMN_CREATE (динамический столбец)

Мне нужно вставить динамический столбец как выбрать из другой таблицы.

Я старался:

INSERT INTO table (id, photos)
VALUES
(12345,COLUMN_CREATE(SELECT file FROM photo WHERE ad_id = 12345));

а также

INSERT INTO table (id, photos)
VALUES
(12345,SELECT COLUMN_CREATE(file) FROM photo WHERE ad_id = 12345));

а также

INSERT INTO table (id, photos)
SELECT ad_id, COLUMN_CREATE(file) FROM photo WHERE ad_id = 12345;

И MariaDB всегда возвращает #1064 — у вас ошибка в синтаксисе SQL;


person Ondřej Machala    schedule 22.10.2014    source источник


Ответы (1)


INSERT INTO `table` (id, photos)
VALUES
(12345,COLUMN_CREATE(1, (SELECT file FROM photo WHERE ad_id = 12345)));

Поместите table в кавычки, поскольку это зарезервированное слово (List зарезервированных слов MariaDB).

Добавьте номер или имя динамического столбца в аргументы функции COLUMN_CREATE (COLUMN_CREATE синтаксис), в моем примере SQL в качестве номера столбца используется 1.

Поместите оператор SELECT в круглые скобки, так как подзапросы должны быть заключены в круглые скобки.

person Julian Ladisch    schedule 22.10.2014
comment
Спасибо! Но теперь MariaDB возвращает #1242 - Подзапрос возвращает более 1 строки Мне нужно вставить больше значений (строк) в динамический столбец, и я думал, что MariaDB автоматически обработает это. - person Ondřej Machala; 23.10.2014
comment
@Ondřej: ни COLUMN_CREATE, ни COLUMN_ADD не могут автоматически создавать несколько динамических столбцов из подзапроса с более чем 1 строкой. - person Julian Ladisch; 23.10.2014