如何获取每个产品的所有变体,并提取多次获取产品名称

问题描述:

我有3个表格。如何获取每个产品的所有变体,并提取多次获取产品名称

“table_products”

product_id product_name 
1   A 
2   B 
3   C 
4   D 
5   E 

“table_varients”

variant_id variant_name 
1   v1 
2   v2 
3   v3 
4   v4 
5   v5 

“table_product_varients”

product_id variant_id 
1   1 
1   2 
1   3 
2   3 
2   4 
3   1 
3   4 
4   1 
5   1 
5   2 

,我想从选择这样的查询结果:

A - V1, V2, V3 
B - V3, V4 
C - V1, V4 
D - V1 
E - V1, V2  

Devesh

简单连接,然后GROUP_CONCAT

SELECT a.product_name, GROUP_CONCAT(c.variant_name) 
FROM table_products a 
INNER JOIN table_product_varients b ON a.product_id = b.product_id 
INNER JOIN table_varients c ON b.variant_id = c.variant_id 
GROUP BY a.product_name 
+0

感谢您的快速反应。 GROUP_CONCAT()将连接字符串Form中的所有值并将其视为单个值。有没有其他方法可以分别读取所有的值(在这种情况下是变体)。我问这是因为在查询后我需要将所有这些值存储在perl变量中。 –

+0

并非如此,因为这意味着从查询中返回每行中可变数量的列。如果您使用GROUP_CONCAT和适当的分隔符,则可以基于该分隔符将该字段分解为数组,但是在脚本中循环插入各个值到数组中可能会更容易。想想php(也可能是Perl),你可以敲一个MySQL函数将GROUP_CONCAT字段转换为序列化数组,但不确定这会有所帮助,我也不期望它很容易被维护。 – Kickstart