MySQL 查询:更新和/或追加

Posted

技术标签:

【中文标题】MySQL 查询:更新和/或追加【英文标题】:MySQL Query: UPDATE and/or APPEND 【发布时间】:2020-07-29 21:42:00 【问题描述】:

我有一个临时表,用于插入主数据库。

临时表名为“temp_table” 主表是“主”

我目前使用以下命令更新“master”

SELECT COUNT(*) FROM master;
SHOW COLUMNS FROM master;
INSERT INTO master
SELECT * FROM temp_table
ON DUPLICATE KEY UPDATE email = VALUES(email), phone = VALUES(phone)

现在,我希望能够将“临时表”中的字段(计数器)附加到“主表”中。该字段已存在于两个表中,我只想更新或附加它。

master 中的“counter”字段可能为空,也可能已经包含一个数值。

In cases where the value exists, it should append separated by a comma.  Format (88,89,90)
In cases where the it's empty, it should update (88)

提前谢谢你。

【问题讨论】:

你所谓的追加也是更新。但是,在将分隔的值列表存储在单个字段值中之前,您确实应该三思而后行。请参阅***.com/questions/3653462/… 了解为什么这不是一个好主意的详细信息 【参考方案1】:

我想你想要:

on duplicate key update 
    email = values(email), 
    phone = values(phone),
    counter = case when counter is null 
        then values(counter) 
        else concat(counter, ',', values(counter))
    end

您也可以使用coalesce() 来表达这一点,尽管这种表达方式可能更难理解:

on duplicate key update 
    email = values(email), 
    phone = values(phone),
    counter = concat(
        coalesce(concat(counter, ','), ''),
        values(counter)
    )

【讨论】:

感谢您的帮助,这很好,很清楚。我运行了它,但“计数器”字段出现模棱两可的错误。

以上是关于MySQL 查询:更新和/或追加的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )

C 语言文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )

MySQL 使用嵌套查询插入或更新

如果 COUNT = 0 [重复],如何在 mySQL 中插入或更新查询

如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]

选择查询和操作查询有何区别?