基本SQL查询 - 使用来自另一个早期备份的更新数据替换一个表列中的数据

时间:2011-04-06 23:31:36

标签: mysql sql join sql-update

我是这类事情的完全新手,因此这是一个简单的问题,但我有2份数据库表,我需要稍微合并一下。

两者都具有完全相同的结构,并包含成员帐户用户名和详细信息。在 table_1 - screen_name中的一列中,数据已被截断,因此我需要将其替换为 table_2 中相同列中的数据,这是较旧的备份同桌。我将重复几列,但首先,我正在尝试替换截断的screen_name。

我猜它应该很简单,但我无法让它发挥作用。只有大约4000行 - 唯一可能的复杂因素是 table_1 的记录多于 table_2 (这是一个较新的版本,从那时起已有更多成员注册),所以列本身不能被旧备份完全替换。

这是我尝试过的,但它似乎没有用(显然会出现语法错误):

UPDATE exp_memberscorrupt 
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 
JOIN exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果这是SQL Server,则语法为

UPDATE exp_memberscorrupt 
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 
FROM exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id

由于它是MySQL,因此update-from-join的语法是:(在“UPDATE”之后将表移到顶部)

UPDATE exp_membersclean
JOIN exp_memberscorrupt on exp_membersclean.member_id = exp_memberscorrupt.member_id
SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name 

答案 1 :(得分:0)

update exp_memberscorrupt cor
set cor.screen_name  = cln.screen_name
from exp_membersclean cln
where cor.member_id = cln.screen_name

答案 2 :(得分:0)

试试这个,

不要忘记使用WHERE子句和mysql_error()函数来捕获db错误

  

更新exp_memberscorrupt
  INNER JOIN exp_membersclean
  ON exp_membersclean.member_id = exp_memberscorrupt.member_id
  SET exp_memberscorrupt.screen_name = exp_membersclean.screen_name
  在哪里......