Mysql 合并返回 0 而不是实际值
Mysql Coalesce returning 0 instead of actual value
INSERT INTO 'rozliczenia' ('userid', 'data', 'stawka') VALUES ('1', '2015-11-01', NULL) ON DUPLICATE KEY UPDATE stawka = COALESCE(VALUES('stawka'), 'stawka');
它应该检查值是否为 NULL。如果是,则不更新 premia 列(我在 table 中没有任何空值),但它会将其更新为 0。为什么?昨天一切正常。
更新前:
Premia 200
之后
Premia 0,虽然它应该是 200
table中的索引:
主要 - ID
唯一 - 数据
唯一 - 用户 ID
它与引号无关,当更改它们时它的行为方式相同
您在 table 和列名两边加了单引号,因此您的查询应该不起作用。
INSERT INTO rozliczenia(userid, data, stawka)
VALUES ('1', '2015-11-01', NULL)
ON DUPLICATE KEY UPDATE stawka = COALESCE(VALUES(stawka), stawka);
coalesce()
returns 0
的原因是因为你传入一个字符串,然后在数字上下文中使用它。在这种情况下,不以数字开头的字符串最终会成为 0
。
重复直到完全理解:"I will only use single quotes for string and date constants."
INSERT INTO 'rozliczenia' ('userid', 'data', 'stawka') VALUES ('1', '2015-11-01', NULL) ON DUPLICATE KEY UPDATE stawka = COALESCE(VALUES('stawka'), 'stawka');
它应该检查值是否为 NULL。如果是,则不更新 premia 列(我在 table 中没有任何空值),但它会将其更新为 0。为什么?昨天一切正常。
更新前:
Premia 200
之后
Premia 0,虽然它应该是 200
table中的索引:
主要 - ID
唯一 - 数据
唯一 - 用户 ID
它与引号无关,当更改它们时它的行为方式相同
您在 table 和列名两边加了单引号,因此您的查询应该不起作用。
INSERT INTO rozliczenia(userid, data, stawka)
VALUES ('1', '2015-11-01', NULL)
ON DUPLICATE KEY UPDATE stawka = COALESCE(VALUES(stawka), stawka);
coalesce()
returns 0
的原因是因为你传入一个字符串,然后在数字上下文中使用它。在这种情况下,不以数字开头的字符串最终会成为 0
。
重复直到完全理解:"I will only use single quotes for string and date constants."