我为某些 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;
但我确实同意您的代码应该工作,当子查询不匹配时插入显式默认值。