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

时间:2011-08-08 15:08:06

标签: 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

执行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 

这可以在SQL语句中完成吗?而不是按我要做的那样创建一个脚本来遍历每个记录检查“BB”并插入基于的新行这是价值观。

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分:1)

假设ID是IDENTITY列:

INSERT INTO myTable (Code, Name)
SELECT ('XX', Name) FROM myTable 
WHERE CODE ='BB'

(不可重复......)

答案 2 :(得分:0)

我不知道你是如何生成id的,但这就是它的工作方式:

insert into my_table 
select new_id() as id, 'xx' as Code, Name 
from my_table 
where Code='BB'