Mysql 更新正在插入0';当子查询不匹配时,浮点字段为s或null
我有一个混合了null和float值的字段(或者我尝试将默认值设为0而不是null),我正在更新该字段。如果一行不匹配,它会将其更新为null。我错过了什么Mysql 更新正在插入0';当子查询不匹配时,浮点字段为s或null,mysql,sql-update,Mysql,Sql Update,我有一个混合了null和float值的字段(或者我尝试将默认值设为0而不是null),我正在更新该字段。如果一行不匹配,它会将其更新为null。我错过了什么 UPDATE table1 t1 set field1 = (SELECT t2.field1 from table2 t2 WHERE t2.some_field = t1.some_filed and t2.some_other_field = foo) 但是,任何不匹配的行: WHERE t2.some_field =
UPDATE table1 t1 set field1 =
(SELECT t2.field1 from table2 t2
WHERE t2.some_field = t1.some_filed and
t2.some_other_field = foo)
但是,任何不匹配的行:
WHERE t2.some_field = t1.some_field
MySQL输入一个空值(或零)。这两个表的字段数不相等,因此我只想更新几个字段,而不覆盖update语句中不匹配的任何内容。我想您可以尝试使用
内部联接查询
UPDATE table1 t1
INNER JOIN table2 t2
ON t2.some_field = t1.some_filed
SET t1.field1 = t2.field1
WHERE t2.some_other_field = 'foo'
我想您可以尝试使用内部联接
查询
UPDATE table1 t1
INNER JOIN table2 t2
ON t2.some_field = t1.some_filed
SET t1.field1 = t2.field1
WHERE t2.some_other_field = 'foo'
对这很有效,但你能解释一下原因吗?为什么我的方法没有呢?@jwillis您没有加入表,只是在where子句上从另一个表中选择数据,这可能会导致错误的返回。联接表将使数据库只选择给定关系的值,所以不会出现错误。您可以对joinquery@jwillis进行直观的解释。我也在检查您的查询,您的值“foo”周围缺少引号,这也可能导致错误,因为它是字符串而不是整数,所以在使用stringsy时,您将始终需要用引号括起来!这很有效,但你能解释一下原因吗?为什么我的方法没有呢?@jwillis您没有加入表,只是在where子句上从另一个表中选择数据,这可能会导致错误的返回。联接表将使数据库只选择给定关系的值,所以不会出现错误。您可以对joinquery@jwillis进行直观的解释。我也在检查您的查询,您的值“foo”周围缺少引号,这也可能导致错误,因为它是字符串而不是整数,所以在使用字符串时,您将始终需要引号