问题描述
我希望复制数据库中的 4 个现有行,并且需要更改新行中其中一列的值。我需要这样做,并确保没有创建重复项。到目前为止我所拥有的是
INSERT INTO table (col1,col2,col3)
SELECT 141,col3,FROM table
WHERE col1 = 99 AND NOT EXISTS
(SELECT * FROM table WHERE col1 = 141,col3)
但是,当我尝试运行此程序时,我的 (SELECT * FROM table WHERE col1 = 141,col3) 行中的逗号处出现语法错误。
有人可以帮忙吗?
编辑:我的数据库中有 4 行具有以下值
col1 | 第 2 列 | col 3 |
---|---|---|
99 | 1 | 启用 |
99 | 3 | A |
99 | 4 | B |
99 | 5 | C |
我想创建以下行,但首先检查重复项
col1 | 第 2 列 | col 3 |
---|---|---|
141 | 1 | 启用 |
141 | 3 | A |
141 | 4 | B |
141 | 5 | C |
解决方法
我认为您应该在选择中使用 EXCEPT 关键字(如果使用 Oracle,则使用 MINUS):
INSERT INTO table (col1,col2,col3)
SELECT 141,col3,FROM table
WHERE col1 = 99
EXCEPT
SELECT 141,FROM table
WHERE col1 = 141;
,
只需删除 col2 和 col3 即可解决问题。
INSERT INTO table (col1,col3)
SELECT 141,col3
FROM table_name t1
WHERE col1 = 99 AND NOT EXISTS
(SELECT * FROM table_name t2 WHERE t2.col1 = 141 and t1.col2=t2.col2 and t1.col3=t2.col3)
,
我现在用以下方法解决了这个问题:
INSERT INTO table (col1,FROM table t
WHERE col1 = 99 AND NOT EXISTS
(SELECT * FROM table nt
WHERE nt.col1 = 141 AND nt.col2 = t.col2 AND nt.col3 = t.col3)