2015-03-03 41 views
1

我需要使用另一行中使用的值更新数据库表。 我有一个数据库4000个产品,每个产品有3行,每种语言1(我使用3种语言)。更新字段mysql表中的值来自其他行的相同产品ID

现在我需要将产品标题从荷兰语语言复制到英文产品行的标题字段和同一产品标识的法语产品行中。一些英文和弗林斯的标题栏是空的,但不是空的。

所以我有这个字段 product_id; language_id; product_title

任何人都可以帮助我与SQL我需要为我所有的4000产品做到这一点?

谢谢你,亲切的问候 皮特

ps_product_lang是产品表
数据库的名称是MySQL的

id_product int(10) unsigned NO PRI NULL  
id_shop int(11) unsigned NO PRI 1  
id_lang int(10) unsigned NO PRI NULL  
description text YES  NULL  
description_short text YES  NULL  
link_rewrite varchar(128) NO  NULL  
meta_description varchar(255) YES  NULL  
meta_keywords varchar(255) YES  NULL  
meta_title varchar(128) YES  NULL  
name varchar(128) NO MUL NULL  
available_now varchar(255) YES  NULL  
available_later varchar(255) YES  NULL  
+1

用例子描述你的问题。 – 2015-03-03 13:32:25

+0

为什么要复制数据?你不能创建一个视图来选择最好的语言吗? – jarlh 2015-03-03 13:35:19

+0

感谢您的回复。不,我只需要将产品标题从荷兰语复制到其他语言等等,因此我需要运行一个查询来完成它,因为要打开每个产品并对其进行更改将会非常重要。亲切的问候皮特 – PeteD 2015-03-03 13:49:19

回答

1

东西沿着这些路线应该工作。

UPDATE ps_product_lang p1 
    SET name = 
     (SELECT name 
      FROM (SELECT * FROM ps_product_lang) p2 
     WHERE p2.`id_product` = p1.`id_product` 
      AND p2.`id_lang` = 6) 
WHERE `id_lang` != 6 

你需要额外的嵌套选择在那里,以防止MySQL的从报告以下错误:

错误代码:1093 您不能指定更新目标表“P1”在FROM子句

+0

谢谢你的回复。请你能解释一下p1和你查询的p2吗?在我的问题中,我告诉过其他语言的某个标题字段并不总是空的,但即使它们不是空的,它们也需要用来自荷兰标题字段的值重写。所以我想在查询后为所有3种语言设定相同的标题。感谢您的信息,亲切的问候Pete – PeteD 2015-03-03 14:00:05

+0

p1和p2只是产品表的别名,允许引用子查询或父查询中的表列。我从你的描述中得到了一个印象,那就是非空的标题应该单独留下。尽管现在我已经相应地修改了SQL。 – 2015-03-03 14:33:15

+0

约翰,我得到一个错误: #1054 - 在 'where子句' UPDATE ps_product_lang P1 集名称= (SELECT名 FROM(SELECT * FROM ps_product_lang)P2 其中'P2未知列 'p2.id_product' .id_product' ='p1.id_product' 和'p2.id_lang' = '6') 其中'id_lang'!= '6' 数据库字段 数据库= ps_product_lang 标题=名称 荷兰语= 6 – PeteD 2015-03-03 14:46:12

相关问题