2011-10-08 47 views
0

我試圖使用下面的查詢從圖像表中獲取圖像(可能會返回多個結果),然後將其插入產品表的字段圖像。因此,圖像表格可能有testsku,url1testsku,url2testsku,url3。然後我需要更新產品表,其中sku是testsku,圖像字段將是url1$^$url2$^$url3。另請注意,test-sku圖像應與testsku圖像連接。嘗試使用mySQL連接字段,然後插入到另一個表

INSERT INTO `products` (image) (SELECT images.sku, group_concat(images.image separator '$^$') 
FROM `images`,`products` 
GROUP BY images.sku) 
WHERE (images.sku=products.sku 
    OR images.sku=CONCAT(products.style,'-',products.color)) 
    AND products.sku='testsku' 

請讓我知道我做錯了什麼,或者我該如何改變這個查詢來更新表。我知道這違背了關係表的目的,但是需要將所有URL在產品表中的圖像字段中連接起來。

編輯:

使用下面的語句,我能夠既「testsku」 URL和「testsku」的URL返回到相同的一行。不過,我仍然無法更新產品表來finus和更新與返回值的圖像字段。另請注意,我需要刪除'testsku'條款,以便它可以適用於所有skus。

SELECT p.sku,GROUP_CONCAT(i.image隔板 '$^$') FROM images I,products p WHERE(i.sku = p.sku OR i.sku = CONCAT(p.style,」 - ',p.color))AND p.sku ='testsku' GROUP BY p.sku

+0

你得到的錯誤是什麼? –

+0

您只指定更新一列'image',但您選擇了兩列(images.sku和組合concat)。這很可能會給你一個錯誤。要更新的列數和所選號碼必須匹配。 –

回答

0

在查看代碼後,我可以看到三件事情。

1.您試圖在產品列中插入一列,但嵌套的Select Query將返回兩列。這可能會導致插入查詢中的列數不匹配。我認爲你可能需要從Select列列表中刪除images.sku。

2.您是否注意到您正在選擇查詢中進行交叉連接。 (無連接),這會導致結果集中有n×m行。

3.您正在使用產品表兩次,一次插入,第二次使用選擇。它會造成含糊不清。爲它們分配唯一的別名。

您的查詢可能是這樣的變化以後。

INSERT INTO `products` as p1 (image) values (SELECT group_concat(images.image separator '$^$') 
FROM `images`,`products` as p2 
GROUP BY images.sku) 
WHERE (images.sku=p1.sku 
    OR images.sku=CONCAT(p1.style,'-',p1.color)) 
    AND p1.sku='testsku' 

我希望這會幫助你。

相關問題