Замена значений столбцов в PostgreSQL - PullRequest
0 голосов
/ 08 июля 2020

В моей базе данных PostgreSQL у меня есть таблица с двумя текстовыми значениями: t1 и t2:

|   id   |   t1   |   t2   |  
|   1    |  abcd  |   xyz  |  
|   2    |  aazz  |   rst  |  
|   3    |  fgh   | qwerty |  

Я хотел бы поменять местами значения столбцов t1 и t2 для каждой строки в таблице таким образом, что, используя приведенный выше пример, это будет результат:

|   id   |   t1   |   t2   |
|   1    |  xyz   |   abcd |
|   2    |  rst   |   aazz |
|   3    | qwerty |   fgh  |

Кроме того, давайте предположим, что значения из всех строк с id = 4 и далее (4 , 5, 6 ...) уже верны, можно ли отфильтровать строки, которые я хочу поменять местами? Я пробовал этот (для MySQL баз данных), но ни одно из решений не помогло.

Ответы [ 2 ]

4 голосов
/ 08 июля 2020

Это простое ОБНОВЛЕНИЕ:

update the_table
  set t1 = t2, 
      t2 = t1
where id < 4;

В отличие от MySQL, Postgres делает это правильно.

3 голосов
/ 08 июля 2020
select * from swapit;
 id |  t1   |   t2
----+-------+--------
  1 | abcd  | xyz
  2 | aazz  | rst
  3 | fgh   | qwerty
  4 | first | second
  5 | first | second
(5 rows)

update swapit set t1 = t2, t2 = t1 where id <= 3;
UPDATE 3

select * from swapit order by id;
 id |   t1   |   t2   
----+--------+--------
  1 | xyz    | abcd
  2 | rst    | aazz
  3 | qwerty | fgh
  4 | first  | second
  5 | first  | second
(5 rows)

...