PostgreSQL UPDATE JOIN ... 它是如何工作的?
PostgreSQL UPDATE JOIN ... How does it work?
我无法理解在 Postgre 中使用某种 JOIN 进行更新SQL
我有以下table(名字),有时在第3列填同义词:
id,name,synm,sd
41,xgvf
24,y4tg
32,zagr,xgvf
48,argv,bvre
53,bvre
我想用 'parent' id 填充第 4 列 (sd)(现在 sd 列为空)
id,name,synm,sd
41,xgvf
24,y4tg
32,zagr,xgvf,41
48,argv,bvre,53
53,bvre
我尝试了以下 sql 语句(以及它的许多类似版本)...
update names
set sd =
(select n2.id from names n1
inner join names n2
on
n1.synm = n2.name);
...我收到以下错误:
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
我理解我当前的错误 SQL 试图用所有找到的 ID 填充一个 sd 行。所以不知何故我不明白。
如何在整个table中填写同义词id(sd)?也许 WITH RECURSIVE 之类的语句?
您可以像这样模拟连接:
update names n1
set sd = n2.id
from names n2
where n2.name = n1.synm;
参见demo。
结果:
| id | name | synm | sd |
| --- | ---- | ---- | --- |
| 41 | xgvf | | |
| 24 | y4tg | | |
| 53 | bvre | | |
| 48 | argv | bvre | 53 |
| 32 | zagr | xgvf | 41 |
我无法理解在 Postgre 中使用某种 JOIN 进行更新SQL
我有以下table(名字),有时在第3列填同义词:
id,name,synm,sd
41,xgvf
24,y4tg
32,zagr,xgvf
48,argv,bvre
53,bvre
我想用 'parent' id 填充第 4 列 (sd)(现在 sd 列为空)
id,name,synm,sd
41,xgvf
24,y4tg
32,zagr,xgvf,41
48,argv,bvre,53
53,bvre
我尝试了以下 sql 语句(以及它的许多类似版本)...
update names
set sd =
(select n2.id from names n1
inner join names n2
on
n1.synm = n2.name);
...我收到以下错误:
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
我理解我当前的错误 SQL 试图用所有找到的 ID 填充一个 sd 行。所以不知何故我不明白。
如何在整个table中填写同义词id(sd)?也许 WITH RECURSIVE 之类的语句?
您可以像这样模拟连接:
update names n1
set sd = n2.id
from names n2
where n2.name = n1.synm;
参见demo。
结果:
| id | name | synm | sd |
| --- | ---- | ---- | --- |
| 41 | xgvf | | |
| 24 | y4tg | | |
| 53 | bvre | | |
| 48 | argv | bvre | 53 |
| 32 | zagr | xgvf | 41 |