2015-03-03 68 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

相關問題