考虑一下由一些家庭成员组成的桌子:
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列中所示)。
我想添加一些我知道的关于一个人的数据,但是我不想查询数据库,而是让数据库将现存的值与新的值合并:
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中只出现一次?
发布于 2013-12-04 19:16:33
为了避免在INSERT语句中放置两次值,请使用VALUES(<column_name>)函数。
插入..。关于重复键更新语法 您可以使用UPDATE子句中的值(Col_name)函数引用INSERT .在重复键更新语句上。换句话说,ON重复键更新子句中的值( col_name )是指在没有发生重复键冲突的情况下将插入的col_name值。此函数在多行插入中特别有用。函数只有在INSERT中才有意义。UPDATE语句,否则返回NULL。
不幸的是,在你的问题中不太清楚你想要的结果是什么。但是,假设您希望只更新具有NULL或空字符串的列,则可以执行
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演示
如果这不是你想要的,请考虑张贴你想要的结果,并解释在什么条件下你想更新什么值。
https://dba.stackexchange.com/questions/54335
复制相似问题