我知道之前已经问过这个问题,我以前的类似问题被驳回了因为已经有几个像这样......但我只是不让这个工作......
我已尝试过(在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)
答案 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
抱歉,但我目前没有可以测试此环境的环境