2016-05-24 273 views
3

我试图做到这一点查询,但我得到了一个错误:更新MySQL查询错误“子查询返回多个1行”

UPDATE ps_product_lang 
SET name=(select name from ps_product_lang_backup where id_lang=2) 
WHERE id_lang = 3 

,但我得到了Subquery returns more than 1 row

也许我必须使用JOIN但我对MySQL真的很陌生,不能自己做。

我想要做的是简单的:我已经在我的数据库3种语言,希望将数据从一种语言(英语id_lang 2)复制到另一个粘贴(俄罗斯,id_lang 3)

+2

您需要提供更多关于ps_product_lang的信息。 –

回答

3

我认为该表还具有product_id列,它是一个产品的独特。

您需要告诉数据库为同一产品选择英文名称

UPDATE ps_product_lang 
SET name=(select name from ps_product_lang_backup 
      where id_lang=2 
      and ps_product_lang.product_id = ps_product_lang_backup.product_id) 
WHERE id_lang = 3 
+0

是的,你假设是正确的,这里的每个人都给了我正确的解决方案:)感谢大家 –

0

这意味着你SELECT Query返回两个以上的结果试试这个

SET name=(select name from ps_product_lang_backup where id_lang=2 LIMIT 1) 
2

我会尽我所能来回答这个 期待您的查询后,很显然,(select name from ps_product_lang_backup where id_lang=2)有一个以上的结果,这就是为什么它是造成你的错误。现在,要解决这个问题,你可以做两件事。

  1. 您可以使用相同的id_lang(简单的一个)删除一条记录。

  2. 或者,你可以改变你的子查询是这样的:

    从ps_product_lang_backup其中id_lang =

    选择名称2 LIMIT 1

这将改变您的查询是这样的:

UPDATE ps_product_lang SET name=(select name from ps_product_lang_backup where id_lang=2 LIMIT 1) WHERE id_lang = 3 

希望得到这个帮助

+1

这不是解决方案..用户想通过另一个表更新多行 –

+0

我试图解决错误,而不是给他提供整个解决方案 – VishAl