Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新正在插入0';当子查询不匹配时,浮点字段为s或null_Mysql_Sql Update - Fatal编程技术网

Mysql 更新正在插入0';当子查询不匹配时,浮点字段为s或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 =

我有一个混合了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 = 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”周围缺少引号,这也可能导致错误,因为它是字符串而不是整数,所以在使用字符串时,您将始终需要引号