我有一个带有ProductID和附件列的Junction表:
TABLE1
ProductID Accessory
1 2
1 3
2 1
2 4
2 5
3
4 1
5 2
这意味着对于ProductID 2,它具有附件产品ID 1,4和5 ...
我的下面的表2看起来像这样 已经提供了GRP和ProductID,我们需要获取附件。
TABLE2
GRP ProductID accessories
a 2
b 3
c 1
d 4
e 5
所以实际上如果使用UPDATE就会像这样
TABLE2
UPDATE table2 t2
set t2.accessories = (SELECT GROUP_CONCAT(DISTINCT t1.Accessory) FROM table1 t1
WHERE t1.ProductID = t2.ProductID)
GRP ProductID accessories
a 2 1,4,5
b 3
c 1 2,3
d 4 1
e 5 2
但是我想根据t2.ProductID改变t2.accessories中的产品ID,而不是使用GRP字符,以便FINAL表看起来像这样。
TABLE2
GRP ProductID accessories
a 2 c,d,e
b 3
c 1 a,b
d 4 c
e 5 a
答案 0 :(得分:0)
这应该适合你:
UPDATE table2 T
SET T.accessories = IFNULL((SELECT foo FROM
(SELECT t1.ProductID,GROUP_CONCAT(t2.GRP) as foo
FROM table1 t1
LEFT JOIN table2 t2 ON t1.Accessory = t2.ProductID
GROUP BY t1.ProductID
) AS bar WHERE ProductID = T.ProductID
),'')
以下是更新后的SQL Fiddle
答案 1 :(得分:0)
您需要有第三个表格,将表格1与表格2相关联。 表2中的附件列打破了第一个正常形式(Database Normal Form)。永远不应该有一个包含多个数据的单元格。这会增加冗余,并且无法将其拉出并解析而无法检索任何单个附件。
因此,表1将具有productID和GRP。然后需要一个只有附件的配件桌。表2将具有两者的主键(productID,附件)。为了解决这些问题,你可以自然地加入这三个。这样可以减少冗余,并允许您拥有一个没有任何附件的GRP和产品。
所以你会:
GRP
的productID
的productID
附件
附件