首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当空数据为空字符串时,插入/更新以合并数据

问当空数据为空字符串时,插入/更新以合并数据
EN

Database Administration用户
提问于 2013-12-03 11:40:20
回答 1查看 16.6K关注 0票数 0

考虑一下由一些家庭成员组成的桌子:

代码语言:javascript
复制
mysql> SELECT * FROM some_table;
+--------+--------+--------+
| f_name | l_name | work   |
+--------+--------+--------+
| Meirav | Cohen  | school |
| Dotan  | Cohen  |        |
+--------+--------+--------+
2 rows in set (0.00 sec)

假设f_name是主键,所有列都是VARCHAR。未知数据并不表示为NULL,而是表示为空字符串(如work列中所示)。

我想添加一些我知道的关于一个人的数据,但是我不想查询数据库,而是让数据库将现存的值与新的值合并:

代码语言:javascript
复制
mysql> INSERT INTO some_table (f_name, l_name, work)
    VALUES ('Dotan', '', 'php')
    ON DUPLICATE KEY UPDATE
        f_name = IFNULL(f_name, 'Dotan'),
        l_name = IFNULL(l_name, ''),
        work   = IFNULL(work,   'php');

当然,IFNULL不适合这个作业,因为它只检查空字符串,而不是空字符串。此外,每个要添加的值都必须在SQL中出现两次,这是一个缺点。

是否有任何方法让数据库将数据与空字符串合并?另外,是否可以使要插入的字符串在SQL中只出现一次?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-12-04 19:16:33

为了避免在INSERT语句中放置两次值,请使用VALUES(<column_name>)函数。

插入..。关于重复键更新语法 您可以使用UPDATE子句中的值(Col_name)函数引用INSERT .在重复键更新语句上。换句话说,ON重复键更新子句中的值( col_name )是指在没有发生重复键冲突的情况下将插入的col_name值。此函数在多行插入中特别有用。函数只有在INSERT中才有意义。UPDATE语句,否则返回NULL。

不幸的是,在你的问题中不太清楚你想要的结果是什么。但是,假设您希望只更新具有NULL或空字符串的列,则可以执行

代码语言:javascript
复制
INSERT INTO some_table (f_name, l_name, work)
VALUES ('Dotan', '', 'php')
ON DUPLICATE KEY UPDATE
  f_name = COALESCE(NULLIF(f_name, ''), VALUES(f_name)),
  l_name = COALESCE(NULLIF(l_name, ''), VALUES(l_name)),
  work   = COALESCE(NULLIF(work, ''), VALUES(work));

这是SQLFiddle演示

如果这不是你想要的,请考虑张贴你想要的结果,并解释在什么条件下你想更新什么值。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/54335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档