PostgreSQL Update join ..它是如何工作的?



我在PostgreSQL中无法理解带有某种JOIN的UPDATE时遇到问题

我有下表(名称(,有时在第 3 列中填写同义词:

id,name,synm,sd
41,xgvf
24,y4tg
32,zagr,xgvf
48,argv,bvre
53,bvre

我喜欢用"父"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 行。所以不知何故我不明白。

如何在整个表中填写同义词 ID (sd(?也许使用递归式语句?

您可以像这样模拟联接:

update names n1
set sd = n2.id
from names n2
where n2.name = n1.synm;

请参阅演示。
结果:

| id  | name | synm | sd  |
| --- | ---- | ---- | --- |
| 41  | xgvf |      |     |
| 24  | y4tg |      |     |
| 53  | bvre |      |     |
| 48  | argv | bvre | 53  |
| 32  | zagr | xgvf | 41  |

最新更新