Нужна команда SQL, которая вставит строку после определенной строки

#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;