#sql #ibm-midrange #db2-400
#sql #ibm-midrange #db2-400
Вопрос:
Мне нужна команда SQL, которая вставит строку после определенной строки. Пример:-
Перед таблицей
Id. Name.
1. Xyz.
2. Xyz
3. Xyz
Желаемый результат необходимо добавить данные ‘Abc’ после каждого ‘xyz’ с одинаковым идентификатором, например:-
Id. Name.
1. Xyz.
1. Abc
2. Xyz
2. Abc
3. Xyz
3. Abc
Комментарии:
1. Таблицы SQL по определению стандартов SQL не имеют порядка , что означает, что не существует
INSERT ... AFTER
типа команды… Если вам нужен порядок, вам нужно определить, какой выборSELECT id, name FROM table ORDER BY id ASC
2. выполнение того, что вы просили, не очень хорошо сказывается на производительности, чем больше увеличивается ваша таблица, тем больше времени потребуется для перемещения всех строк, чтобы освободить место для вставленной строки. В реальном мире вы обычно вставляете строки в нижней части таблицы, а затем сортируете таблицу с помощью
ORDER BY
Ответ №1:
Вам нужно UNION ALL
:
SELECT t.*
FROM (SELECT id, Name
FROM table t
UNION ALL
SELECT ID, 'Abc'
FROM table t
) t
ORDER BY ID, NAME;
Это не приведет к вставке строки, это просто предоставит вам представление времени выполнения. Если вы хотите только вставить, вам нужно обрезать вашу таблицу (примечание: сделайте резервную копию текущей таблицы) и выполнить операцию вставки.
Ответ №2:
INSERT INTO your_table
SELECT Id
,'Abc' AS Name
FROM your_table
Where Name = 'Xyz'
Я не уверен, что OVERRIDING SYSTEM VALUE
это необходимо, это зависит от вашей таблицы. Но этот запрос должен выполнять то, что вам нужно. Она получит все строки, содержащие значение Xyz и использующие тот же идентификатор и другое имя. Тогда, если вы заказываете по идентификатору, потому что помните, что заказ никогда не гарантируется, если вы не используете order by
Ответ №3:
Попробуйте это
START TRANSACTION;
UPDATE table_sample SET column = column 1 WHERE column >= some_value_here ";
INSERT INTO table_sample (id, column_name) VALUES
(NULL, 'value_here');
COMMIT;