Mysql 对两个表使用重复密钥更新

Mysql 对两个表使用重复密钥更新,mysql,sql,sql-update,sql-insert,mysql-error-1064,Mysql,Sql,Sql Update,Sql Insert,Mysql Error 1064,我正在尝试对重复密钥更新使用 我的结构是我想添加新数据,并更新表(在我的学生表中,由Excel导入)。我表中的一些数据存在电子邮件,我只想更新其他列。(新表中忽略具有新值和空值的表) 我的电子邮件是唯一的外键,其余的数据都是绑定的。 该代码不起作用,并且一直提示出现语法错误 CREATE TABLE Students ( email VARCHAR(50) NOT NULL FOREIGN KEY REFERENCES Users(email),

我正在尝试对重复密钥更新使用

我的结构是我想添加新数据,并更新表(在我的学生表中,由Excel导入)。我表中的一些数据存在电子邮件,我只想更新其他列。(新表中忽略具有新值和空值的表)

我的电子邮件是唯一的外键,其余的数据都是绑定的。 该代码不起作用,并且一直提示出现语法错误

CREATE TABLE Students
(   email                   VARCHAR(50) NOT NULL    FOREIGN KEY REFERENCES  Users(email),
a varchar(50) null,
b varchar(50) null,
c varchar(50) null,
c varchar(50) null)


INSERT INTO [dbo].[Students](email, a, b, c, d)
select t2.email, t2.a, t2.b, t2.c, t2.d
from [dbo].[2020students$]
ON DUPLICATE KEY UPDATE a = value(if(t2.a IS NOT NULL, a,t2.a)), a = value(t2.b), a = value(t2.c), a = value(t2.d) 

我认为您需要的语法是:

insert into students(email, a, b, c, d)
select email, a, b, c, d
from `2020students$`
on duplicate key update 
    a = coalesce(values(a), a), 
    b = values(b), 
    c = values(c), 
    d = values(d)
这通过更新值
b
c
d
来解决冲突。特殊情况为
a
,仅当新值不是
null
时才会更新


这假设您正在运行MySQL—这一点并不明显,因为方括号和模式
dbo
的使用看起来更像SQL Server语法。

[dbo].[Students]
是SQL Server语法<重复密钥更新时的代码>是MySQL语法。它们不能结合在一起。请仔细查看您正在使用的DBMS,并删除错误的标记。对SQL Server使用
MERGE
。看到差异了吗?对不起,我是在SQL Server中运行的,重复密钥更新是否只适用于Mysql?