mysql - 对两个表使用 ON DUPLICATE KEY UPDATE

标签 mysql sql sql-update sql-insert mysql-error-1064

<分区>

我正在尝试使用 On Duplicate Key Update

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

我的电子邮件是唯一外键,其余数据都是绑定(bind)的。 代码不行,一直提示ON has a syntax error。

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)

这通过更新值 bcd 来解决冲突。 a 的特殊情况,只有当新值不为 null 时才会更新。

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

关于mysql - 对两个表使用 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65002384/

相关文章:

php - 新安装 XAMPP 后无法运行 PHP

sql - 在 Oracle 的插入语句中遇到字符串常量大小限制

SQL 存储过程 - 为什么使用 "OUT"而我只能选择

sql - 使用索引器在 Azure 搜索服务中创建集合

sqlite - 用另一个表的总和更新表中的列

mysql - 如何在 mysql 中使用删除级联?

php - 我可以在 PHP/MySQL 数据库中存储单个变量(不在表中)吗

php - 关于更新数据库的MySQL错误消息

php - 如何将 html 表单与 sql 数据库表链接?

php - mysql更新查询不适用于通过php上传图片