在 PostgreSQL 中交换列值

Gui*_*oza 6 postgresql sql-update

在我的PostgreSQL数据库中,我有一个包含两个文本值的表,t1并且t2

|   id   |   t1   |   t2   |  
|   1    |  abcd  |   xyz  |  
|   2    |  aazz  |   rst  |  
|   3    |  fgh   | qwerty |  
Run Code Online (Sandbox Code Playgroud)

我想以一种方式交换列的值t1t2表中的每一行,使用上面的例子,这将是结果:

|   id   |   t1   |   t2   |
|   1    |  xyz   |   abcd |
|   2    |  rst   |   aazz |
|   3    | qwerty |   fgh  |
Run Code Online (Sandbox Code Playgroud)

另外,让我们假设 id=4 之后的所有行(4、5、6...)的值都已经正确,是否可以过滤我想要交换的行?
我试过这个(用于 MySQL 数据库),但没有一个解决方案有效。

a_h*_*ame 10

这是一个简单的更新:

update the_table
  set t1 = t2, 
      t2 = t1
where id < 4;
Run Code Online (Sandbox Code Playgroud)

与 MySQL 不同,Postgres 正确地做到了这一点。


Mik*_*nek 10

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)

Run Code Online (Sandbox Code Playgroud)

  • 每个人都忘记了 PostgreSQL 的美味功能:“set (t1, t2) = (t2, t1)” (2认同)