2014-04-28 46 views
0

目标是当表1不是默认值时将表1链接到表2并填充表1。MySQL - 使用IF语句的多列UPDATE语句

例子:

UPDATE table1 aa, table2 bb 
SET aa.column2=IF(aa.column2=0,bb.column2,aa.column2) and aa.column3=IF(aa.column3=0,bb.column3,aa.column3)... Total of 5 columns being updated 
WHERE aa.column1=bb.column1; 

当运行这个我收到贫困人口。但是,如果我从SET行中删除除IF语句以外的所有内容,则一切都按预期工作。

我对MySQL比较陌生,所以任何人都可以提供的帮助将非常感谢。

+0

“贫困人口”?你究竟得到了什么? – Andrew

+0

安德鲁 - 由于贫困人口我指的是没有像他们应该已经填充的列(假设我的声明被正确写入)。例如,我发现我验证的几个控制行在两个表之间有唯一的连接。使用上面我没有填充的几个控制行的声明。但是,通过从SET语句中除去一列而将所有控件行填充。通过删除AND并放置一个逗号到目前为止,我收到了我正在寻找的结果。 – user3582260

回答

0

最好使用明确的join语法。但是,更重要的是,您不要使用and来连接set语句。您使用and连接布尔值,,用于set报表。这对查询的解释方式有很大的影响。

试试这个:

UPDATE table1 aa JOIN 
     table2 bb 
     ON aa.column1=bb.column1 
    SET aa.column2=IF(aa.column2=0,bb.column2,aa.column2), 
     aa.column3=IF(aa.column3=0,bb.column3,aa.column3), 
     ... Total of 5 columns being updated; 
+0

感谢您的快速回复。这个逻辑很有意义。我会在几次查询中测试它,并希望它能提供更一致的结果。再次感谢! – user3582260

0

使用逗号,而不是and。 逗号是分隔符,and只是运算符。