2016-12-06 32 views
0

由于一些不可预见的情况,我拥有的Open Cart客户表的address_id已将其所有记录的address_id重置为0,这会导致问题。从不同表中的值创建mySQL UPDATE语句

我确实有sql的备份,但是我只在INSERT表单中有它,但由于自上次备份以来有些事情发生了变化,我宁愿它是UPDATE语句。

因此,而不是:

INSERT INTO oc49_customer (customer_id,firstname,surname,address_id etc.) VALUES ('1','Joe','Bloggs','1' ...), ('2','Jane','Doe','2'...) 

我宁愿:

UPDATE oc49_customer SET address_id = 1 WHERE customer_id = 1 

有没有一种方法可以轻松地做到这一点,因为现在我有两个表 - 现有的客户表,也是一个customer_temp表是哪个备份的正确地址ID?

回答

2

是,使用子查询

Update oc49_customer 
    set address_id = 
     (Select address_id from oc49_customer_old 
     where customer_id = oc49_customer.customer_id) 
From oc49_customer 

也尝试没有FROM子句中的所有:

Update oc49_customer 
    set address_id = 
     (Select address_id from oc49_customer_old 
     where customer_id = oc49_customer.customer_id) 
+0

感谢 - 我不明白,最后从线有关系吗?基于我的备份被称为'oc49_customer_old'而我的生命是'oc49_customer'的事实,您是否可以使用这些名称来重写以帮助我理解? –

+0

当我运行查询时,它告诉我在'FROM oc49_customer c'附近有一个语法错误(我用c因为new似乎是一个保留关键字) –

+0

它不应该是'WHERE'子句,而不是'FROM '子句? –

0
UPDATE oc49_customer 
SET address_id = (SELECT address_id 
    FROM oc49_customer_old 
    WHERE (oc49_customer_id = oc49_customer_old_id) 
WHERE EXISTS (oc49_customer_id = oc49_customer_old_id)