我已经为某些 INT 字段编写了一个默认值为 -1 的 CREATE 语句:
CREATE TABLE IF NOT EXISTS table (
country_id INT(11) NOT NULL DEFAULT -1,
...)
当使用 UPDATE 进行连接时,不匹配的值被替换为 0,而不是我预期的 -1:
UPDATE table AS t1
SET
t1.country_id = (SELECT
t2.id
FROM
country AS t2
WHERE
t1.country = t2.country
);
=> 当 UPDATE 没有找到匹配时,country_id 被设置为 0 而不是 -1
关于如何获得正确行为的任何想法?
最佳答案
我建议您将查询写成:
UPDATE table t1 JOIN
country t2
ON t1.country = t2.country
SET t1.country_id = t2.id;
但我同意您的代码应该可以工作,在子查询不匹配时插入显式默认值。
关于MySQL 字段默认值未应用于连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44928076/