在重复密钥更新时在第一个空列上插入Mysql

在重复密钥更新时在第一个空列上插入Mysql,mysql,insert-into,case-when,on-duplicate-key,Mysql,Insert Into,Case When,On Duplicate Key,我试图设置一个查询,在第一个空列上插入数据,或者,如果键值存在,在第一个空列上更新数据 "INSERT INTO table (myid,tr1) VALUES ('12345', '$data') ON DUPLICATE KEY UPDATE tr1 = CASE WHEN tr1 = '' ELSE tr1 END, tr2 = CASE WHEN tr2 = '' ELSE tr2 END, tr3 = CASE WHEN tr3 = '' ELSE tr3 END = $data"

我试图设置一个查询,在第一个空列上插入数据,或者,如果键值存在,在第一个空列上更新数据

"INSERT INTO table 
(myid,tr1)
VALUES ('12345', '$data') 
ON DUPLICATE KEY UPDATE
tr1 = CASE WHEN tr1 = '' ELSE tr1 END,
tr2 = CASE WHEN tr2 = '' ELSE tr2 END,
tr3 = CASE WHEN tr3 = '' ELSE tr3 END = $data"
其中myid是唯一键,换句话说:

--------------------------
| myid | tr1 | tr2 | tr3 |
--------------------------
| 1233 | data|     |     |
--------------------------
|      |     |     |     |
--------------------------

当我的id匹配时,它会更新下一个空列中的$data,在这种情况下,myid=1233的列将是tr2。当myid不存在时,在tr1上插入myid和$data。查询中出现语法错误,请提供帮助

问题可能出在case子句中。试试这个例子

我对查询做了一些更改,现在应该可以工作了


真管用!但是现在更新时,它会用$data更新所有空字段,如何只更新下一个空字段?
INSERT INTO `table` (myid,tr1)
VALUES ('12345', '111') 
ON DUPLICATE KEY UPDATE
tr3 = CASE WHEN tr2 != '' AND tr3 = '' THEN '111' ELSE tr3 END,
tr2 = CASE WHEN tr1 != '' AND tr2 = '' THEN '111' ELSE tr2 END,
tr1 = CASE WHEN tr1 = '' THEN '111' ELSE tr1 END;