Как сохранить результат запроса в таблицу?
SELECT row_number() OVER w as one, two, three, four FROM mytable WINDOW w AS (ORDER BY one, two, three, four)
Если имеется готовый и дающий правильный результат запрос на выборку
SELECT (что-то)
FROM (откуда-то)
и существует задача сохранить результат такого запроса в некую уже имеющуюся таблицу, достаточно преобразовать его в запрос на добавление данных, добавив в начало блок
INSERT INTO имеющаяся_таблица (список полей)
SELECT (что-то)
FROM (откуда-то)
Какие следует соблюсти мелочи?
Список полей в имеющемся SELECT и в добавляемом INSERT должны точно совпадать по порядку (нельзя менять порядок, даже если имена "накрест" совпадают - имена полей при добавлении игнорируются, работает только номер поля в записи). Тем более - совпадать по количеству. Если в запросе полей нехватает - добавьте в список вывода литералов до требуемого. Это проще, чем надеяться на DEFAULT-значения (кроме автоинкремента, конечно, если он не приходит из запроса), и более контролируемо.
Тип поля, в которое помещается значение в части INSERT, должен иметь возможность принять тип, который имеет соответствующее поле в SELECT. Либо оно должно туда поместиться после неявного преобразования (например, сервер легко преобразует дату в текст). Также надо следить по длине значения (если итоговый текст длинноват - сервер его обрежет, правда, выдаст предупреждение), и не забывать о точности. Помните и о том, что timestamp - он с зоной времени. Ну и так далее. Если прямого соответствия нет, настоятельно рекомендую не надеяться на неявное преобразование от сервера, а подкорректировать список вывода в SELECT. Например, если нужно поместить строковое значение поля num
в поле числового типа, то лучше заменить SELECT num, ...
на SELECT num+0, ...
(или, скажем, SELECT CAST(num AS DECIMAL(16, 6)), ...
- по потребности).
Отдельно для тех полей-приёмников, для которых в поле-источнике может оказаться NULL, проверьте, определено ли это поле как NULLable. Если нет - либо измените свойства поля в таблице, либо замените NULL на иное значение функцией COALESCE либо IFNULL.
Отдельная песня - кодировки текста. Ну тут можно только посоветовать быть максимально внимательным. И, как в пункте 2, при малейшем подозрении на косяк - явно использовать функцию CONVERT.
Ну и помните, что при наличии в таблице-приёмнике автоинкремента его надо переинициализировать на новое значение, в соответствии с уже имеющимся максимальным значением. Простым ALTER TABLE. Иначе следующая вставка в таблицу может закончиться крахом.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужна помощь/советМне необходимо в конструкторе сайтов https://tilda
Лексическое окружение понятно, а как понять замыкания в JSКакую функцию она выполняет
сразу же извиняюсь, если ошибка была глупойЕсть изображение, при нажатии на него, див с ид фильтр должен становиться блочным
Допустим, есть такой код: