sql-在字段等于另一个值的位置插入新行
无论哪里CODE=“BB”,我想插入一个包含所有相同行/列数据的新行,只需将代码更改为“XX” 例如: 当前表格:sql-在字段等于另一个值的位置插入新行,sql,database,postgresql,Sql,Database,Postgresql,无论哪里CODE=“BB”,我想插入一个包含所有相同行/列数据的新行,只需将代码更改为“XX” 例如: 当前表格: ID | CODE | Name ---+----------+--------- 1 | AA | Tom 2 | BB | Mary 3 | AA | John 4 | CC | Carlos 5 | CC | Mario 6 | BB | Steve 7 | AA | P
ID | CODE | Name
---+----------+---------
1 | AA | Tom
2 | BB | Mary
3 | AA | John
4 | CC | Carlos
5 | CC | Mario
6 | BB | Steve
7 | AA | Pablo
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语句后相同:
ID | CODE | Name
---+----------+---------
1 | AA | Tom
2 | BB | Mary
3 | AA | John
4 | CC | Carlos
5 | CC | Mario
6 | BB | Steve
7 | AA | Pablo
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”并根据其值插入新行。假设ID是一个标识列:
INSERT INTO myTable (Code, Name)
SELECT ('XX', Name) FROM myTable
WHERE CODE ='BB'
(不可重新命名…此代码包括一项检查,以确保“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')
我不知道您是如何生成id的,但它是如何工作的:
insert into my_table
select new_id() as id, 'xx' as Code, Name
from my_table
where Code='BB'