Myqsl使用子查询更新

时间:2015-10-09 22:48:36

标签: mysql

我试图写一个MySQL查询来更新表,但是我得到了一个错误。这是我的问题:

UPDATE mytable 
SET mytable.email = (
    select ps_customer.id_customer 
    from ps_customer 
    where ps_customer.email = mytable.email) 
where (ps_customer.email = mytable.email)

Mysql说:#1054 - 未知栏' ps_customer.email'在' where子句'

我无法理解错误在哪里。你能帮帮我吗?

最诚挚的问候, 西蒙

2 个答案:

答案 0 :(得分:1)

你的第二个WHERE在子查询中看不到。你如何接近这个有点奇怪;如果使用带有INNER JOIN的UPDATE,则可以使用WHERE条件作为JOIN条件,只需在一个JOINed表中设置字段,并使用另一个JOINed表中的值。像这样....

UPDATE mytable INNER JOIN ps_customer 
    ON mytable.email = ps_customer.email
SET mytable.email = ps_customer.id_customer 
;

答案 1 :(得分:0)

您不需要第二个WHERE子句。子查询中的WHERE子句匹配两个表之间的行(这称为相关子查询)。但是编写它的更好方法是作为连接:

UPDATE mytable AS m
JOIN ps_customer AS c ON m.email = c.email
SET m.email = c.id_customer