MySQL 字段默认值未应用于连接

标签 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

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

最佳答案

我建议您将查询写成:

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/

相关文章:

PHP的无限循环或jQuery setInterval?

mysql - 计算 SQL 中的空字段或 null 字段

PHP 写入数据库,发现发生了什么

mysql - 如何从生日日期开始按年龄对 MySQL 结果进行排序

android - 在sqlite中以树结构从数据库中获取数据

MySQL DISTINCT 和空格

sql - 在不同组中的数据类型之间进行比较时,如何处理潜在的数据丢失

mysql - 如何使用触发器来限制修改

mysql - 查询合并两个表的数据

mysql用另一个表中的值更新列