SQL Update表单元格基于另一个表中的相同表格单元格

时间:2014-11-05 13:56:12

标签: mysql sql

我知道之前已经问过这个问题,我以前的类似问题被驳回了因为已经有几个像这样......但我只是不让这个工作......

我已尝试过(在PHPmyAdmin中)使用table2到table1的值更新cell24

UPDATE name_table1 A
SET 'A.cell24' FROM 'B.cell24'
FROM name_table2 B
WHERE A.id = B.id
AND A.cell24 = NULL

但是这个原因"#1064 - 你的SQL语法有错误; ....."

我试过这个:

UPDATE name_table1  A
SET A.cell24 = ( SELECT B.cell24
                 FROM name_table2 B )

这可以工作但是它删除了不应该更新的其他id的cell24中的所有值。只有两个表中具有相同id的cell24才能正确更新。休息是空白

UPDATE name_table1 A
SET A.cell24 = ( SELECT B.cell24
                 FROM name_table2 B
                WHERE A.id = B.id AND A.cell24 = NULL ) 

这导致table1中的所有cell24都为空

请帮助:P

(我还需要知道如何在一个查询中使用更多单元格进行此更新,例如,如果单元格为空(NULL),我需要更新cell24,cell25,cell26)

2 个答案:

答案 0 :(得分:0)

您的语法略有偏差:

 UPDATE A
 SET cell24 = B.cell24
 FROM name_table1 A 
    JOIN name_table2 B
       ON A.id = B.id
 WHERE A.cell24 IS NULL

要更新多个单元格,您可以尝试一些更复杂的SQL更新语句,但最简单和最可靠的做法是为要更新的每个列执行连续的UPDATE语句。这样做的原因是WHERE控制您更新的记录,如果你做了这样的事情:

UPDATE A
SET cell24 = B.cell24
  , cell25 = B.cell25
..
WHERE  A.cell24 is null or A.cell25 is null

...当该列为该记录的列为空时,您将更新两列。

答案 1 :(得分:0)

你可以在这里找到你的确切答案: How can I do an UPDATE statement with JOIN in SQL?

这里的语法是给oracle,mssql,mysql

从答案中复制:

  

更新你的      内部联合销售          u.id = s.udid      设置u.assid = s.assid

所以它应该是

update ud u
inner join sale s on
    u.id = s.udid
set u.assid = s.assid, u.secondfield = s.secondfield

用于多列

在你的情况下应该是:

UPDATE name_table1 A
INNER JOIN name_table2 B ON
A.id = B.id
AND A.cell24 = NULL
SET A.cell24 = B.cell24, A.cell25 = B.cell25
抱歉,但我目前没有可以测试此环境的环境