Mysql使用逗号分隔列表-连接表
我有一个带有ProductID和附件列的连接表: 表1Mysql使用逗号分隔列表-连接表,mysql,group-concat,junction-table,Mysql,Group Concat,Junction Table,我有一个带有ProductID和附件列的连接表: 表1 ProductID Accessory 1 2 1 3 2 1 2 4 2 5 3 4 1 5 2 这意味着对于ProductID 2,它具有辅助ProductID 1、4和5 下面的表2是这样的 GRP和ProductID已经提供,我们需要获取附件 表2 GRP Pr
ProductID Accessory
1 2
1 3
2 1
2 4
2 5
3
4 1
5 2
这意味着对于ProductID 2,它具有辅助ProductID 1、4和5
下面的表2是这样的
GRP和ProductID已经提供,我们需要获取附件
表2
GRP ProductID accessories
a 2
b 3
c 1
d 4
e 5
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
GRP ProductID accessories
a 2 c,d,e
b 3
c 1 a,b
d 4 c
e 5 a
所以实际上,如果使用UPDATE,它会是这样的
表2
GRP ProductID accessories
a 2
b 3
c 1
d 4
e 5
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
GRP ProductID accessories
a 2 c,d,e
b 3
c 1 a,b
d 4 c
e 5 a
但是我想根据t2.ProductID,用GRP字符来更改t2.accessories中的ProductID,以便最终的表如下所示
表2
GRP ProductID accessories
a 2
b 3
c 1
d 4
e 5
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
GRP ProductID accessories
a 2 c,d,e
b 3
c 1 a,b
d 4 c
e 5 a
以下是表格这应该适合您:
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
),'')
以下是更新的这应该适合您:
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
),'')
这是更新后的您需要第三个表来链接表1和表2。 表2中的附件列打破了第一个范式()。决不能有一个单元格包含多条数据。这增加了冗余度,使得在不拉出并解析任何附件的情况下,无法检索任何单个附件 因此,表1将包含productID和GRP。然后需要一个只有附件的附件表。表2将具有来自这两者的主键(productID、附件)。为了把他们弄出来,你会自然而然地加入这三个人。这减少了冗余,并允许您拥有一个没有任何附件的GRP和产品 所以你会: 表1 玻璃钢 产品ID 表2 产品ID 附属品 表3
附件您需要第三个表来链接表1和表2。 表2中的附件列打破了第一个范式()。决不能有一个单元格包含多条数据。这增加了冗余度,使得在不拉出并解析任何附件的情况下,无法检索任何单个附件 因此,表1将包含productID和GRP。然后需要一个只有附件的附件表。表2将具有来自这两者的主键(productID、附件)。为了把他们弄出来,你会自然而然地加入这三个人。这减少了冗余,并允许您拥有一个没有任何附件的GRP和产品 所以你会: 表1 玻璃钢 产品ID 表2 产品ID 附属品 表3 附属品