Задать вопрос
@Serego
Начинающий веб-разработчик

Как в таблицу sql с 4 столбцами вставить список значений, в котором может быть меньше 4х значений?

У меня есть таблица со столбцами a, b, c, d.

И в нее нужно вставить длинный список примерно такого вида:
(1111, 1111, 1111, 1111),
(222, 222, 222),
(3333),
(4444, 4444),
(5555),
(6666, 6666, 6666, 6666),

Т.е. есть строки, где есть все 4 значения, а есть где меньше. Какой командой этот список можно вставить в таблицу, чтобы самое левое значение попало в столбец a, следующее в b и т.д.. А если значений меньше 4х, то поле должно остаться пустым.
Как это можно сделать?
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Пример реализации, когда показанный список передаётся в запрос как один (многострочный) строковый литерал @list:

INSERT INTO test (a,b,c,d)
SELECT a,b,c,d
FROM JSON_TABLE(
  CONCAT('[', REPLACE(REPLACE(@list, '(', '['), ')', ']'), ']'),
  '$[*]' COLUMNS (
    a INT PATH '$[0]',
    b INT PATH '$[1]',
    c INT PATH '$[2]',
    d INT PATH '$[3]'
    )                   
  ) jsontable

DEMO fiddle

Если данные на вставку лежат в файле - есть функция LOAD_FILE (не забыть GRANT FILE).
Если данные передаются из языка/фреймворка - разумнее прямо там создать JSON и не париться с CONCAT и REPLACE.
Если NULL не устраивает - добавить COALESCE.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
soulilya
@soulilya
Культурный, утонченный и изысканный.
Заменяешь недостающие Null или "". Если в этом проблема. Должно так примерно получиться: (1234, null, null, null)
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Как это можно сделать?
Средствами sql никак. Либо написать скрипт на 10 строк по перегону в нормальный формат, либо страдать ручками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы