考虑一些家庭成员的表格:
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
不适合这项工作,因为它只检查 NULL,而不是空字符串。此外,还有一个缺点是要添加的每个值必须在 SQL 中出现两次。
有没有办法让数据库将数据与空字符串合并?另外,是否可以使要插入的字符串在 SQL 中只出现一次?
INSERT
为了避免在语句中使用两次值,请使用VALUES(<column_name>)
函数。不幸的是,你的问题不是很清楚你想要的结果是什么。但是假设您只想更新具有
NULL
或空字符串的列,您可以这样做这是SQLFiddle演示
如果它不是您想要的,请考虑发布您想要的结果并解释您想要更新的条件下的值