ON DUPLICATE KEY 无法与我的 INSERT INTO 脚本配合使用
2021-08-22
653
我有两个表。一个是
codmission_index
,另一个是
permission_index_bkp
。
我的脚本应该从
permission_index
转移一些行和数据
cermission_index_bkp
。但是,如果所有4列中的数据都相同,我不想创建新行。
这就是我要使用的内容:
402366179
我一直在遇到类似的错误:
1052:字段列表中的列'app'是模棱两可的 (我认为我通过在curmission_index_bkp中更改列的名称来解决此问题) 。
或
1054:未知列'app'在“字段列表”'
你们能告诉我如何修复我的查询?
谢谢!
编辑1:
这使错误消失了,但是,添加行在
cermission_index_bkp
中,即使它们具有相同的值:
889625703
2个回答
在
ON DUPLICATE KEY
子句中使用
VALUES()
来指定您想要将列更新为已插入的值。
并且您需要分配给目标表中的列名称,而不是您选择的表中的名称,因此它们应该全部为
b_XXX
。
INSERT INTO permission_index_bkp
(b_app, b_perm_type, b_perm_type_id, b_perm_3)
SELECT app, perm_type, perm_type_id, perm_3
FROM permission_index
WHERE app = 'module'
AND perm_type = '1'
AND perm_type_id = '2'
AND perm_3 IS NOT NULL
ON DUPLICATE KEY UPDATE
b_app = VALUES(b_app),
b_perm_type = VALUES(b_perm_type),
b_perm_type_id = VALUES(b_perm_type_id),
b_perm_3 = VALUES(b_perm_3);
此外,您不需要在
ON DUPLICATE KEY UPDATE
子句中包含唯一键列。
Barmar
2021-08-22
虽然我从未使用过这种语法,但在谷歌上搜索后,我发现您需要在
permission_index
表的所有四列上声明一个唯一键来删除重复的条目。
请查看以下示例:
create table test (a int, b int);
insert into test values(1,1);
insert into test values(1,2);
create table test2 (a int, b int,
UNIQUE KEY uktest2 (a,b));
INSERT INTO test2
(a,b)
SELECT a,b
FROM test b
WHERE a=1
ON DUPLICATE KEY UPDATE a = b.a,
b=b.b;
select * from test;
select * from test2;
输出:
表测试:
a | b |
---|---|
1 | 1 |
1 | 2 |
表格测试2:
a | b |
---|---|
1 | 1 |
1 | 2 |
insert into test values(1,3);
insert into test values(1,1);
INSERT INTO test2
(a,b)
SELECT a,b
FROM test b
WHERE a=1
ON DUPLICATE KEY UPDATE a = b.a,
b=b.b;
select * from test;
select * from test2;
输出:
表格测试:
a | b |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 1 |
表格测试2:
a | b |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
db<fiddle 此处
Kazi Mohammad Ali Nur Romel
2021-08-22