我有两个表X和Y.它们都有共同的“名称”列 .
X的列是
-
id(自动增量) - 主键
-
名字
-
电子邮件
-
值 .
Y的列是
-
id(自动增量) - 主键
-
名字
-
性
-
薪水
在X中有一些行不存在于Y中 . 我想将那些丢失的行插入Y.除此之外,我还想更新Y中与X中的记录同名的现有记录 .
我试图运行以下查询 .
INSERT INTO Y (name, sex, salary)
SELECT X.name, 'FEMALE' AS sex, '1000' AS salary
FROM X LEFT JOIN Y ON X.name=Y.name
WHERE X.email LIKE '%@test.com'
ON DUPLICATE KEY UPDATE sex='MALE';
但是当我运行此查询时,它不是更新表Y中具有相同名称的现有记录,而是插入新的记录 .
所以我想知道“在DUPLICATE KEY UPDATE上”只使用主键进行比较 . 是否可以在该子句中给出任何不同的列(名称) .
1 回答
如下更改您的查询 . 是的,比较发生在主键列上 . 如果插入的行会导致
UNIQUE index or PRIMARY KEY
中出现重复值,则执行旧行的UPDATE
. 有关更多信息,请参见Documentation .(或)将它们分成两个查询,如
INSERT
执行
UPDATE