sql - 在字段等于另一个值时插入新行

cap*_*gon 3 sql database postgresql

无论CODE ="BB",我想插入一个包含所有相同行/列数据的新行,只需将CODE更改为"XX"即可.

例如:

当前表:

ID |    CODE  | Name
---+----------+---------
 1 |    AA    | Tom
 2 |    BB    | Mary
 3 |    AA    | John
 4 |    CC    | Carlos
 5 |    CC    | Mario
 6 |    BB    | Steve
 7 |    AA    | Pablo
Run Code Online (Sandbox Code Playgroud)

执行SQL语句后相同:

ID |    CODE  | Name
---+----------+---------
 1 |    AA    | Tom
 2 |    BB    | Mary
 3 |    AA    | John
 4 |    CC    | Carlos
 5 |    CC    | Mario
 6 |    BB    | Steve
 7 |    AA    | Pablo
 8 |    XX    | Mary
 9 |    XX    | Steve 
Run Code Online (Sandbox Code Playgroud)

这可以在SQL语句中完成吗?而不是做我要做的事情,创建一个脚本循环遍历每个记录检查"BB"并根据它的值插入一个新行.

Joe*_*lli 8

此代码包括检查以确保"XX"版本尚不存在.

INSERT INTO CurrentTable
    (CODE, Name)
    SELECT 'XX', ct1.Name
        FROM CurrentTable ct1
        WHERE ct1.CODE = 'BB'
            AND NOT EXISTS(SELECT NULL
                               FROM CurrentTable ct2
                               WHERE ct1.name = ct2.name
                                   AND ct2.CODE = 'XX')
Run Code Online (Sandbox Code Playgroud)