在连接

时间:2017-07-05 13:47:01

标签: mysql sql

我为一些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

关于如何获得正确行为的任何想法?

1 个答案:

答案 0 :(得分:0)

我建议您将查询编写为:

UPDATE table t1 JOIN
       country t2
       ON t1.country = t2.country
    SET t1.country_id = t2.id;

但我确实同意你的代码应该工作,当子查询没有匹配时插入显式默认值。