2013-09-23 108 views
0

我不是一个SQL人,所以这个问题可能对你们很多人来说很容易。但我有两个表,我想一个SQL语句,通过组合和表1的值2SQL:一张表引用另一张表返回第三张表

回到我第三个表,我有以下表格:

表产品:

Column NAME 
Column CAMPAIGNS 

表CAMPAIGN:

Column ID 
Column NAME 

用下面的值:

产品:

Nike Sneakers | 1 2 3 

活动:

1 | Red Shoes 
2 | No laces 
3 | Velcro 
4 | White Shoes 

,而非广告活动的ID,我想与产品返回的活动名称。

结果表:

Nike Sneaker | Red shoes, No laces, Velcro 

你们将如何实现这一目标?

谢谢!

+1

您需要查看规范化数据库并在Product和Campaign之间创建多对多表。没有简单的方法将产品中的值1 2 3加入Campaign中的3个独立记录。 – Greg

回答

2

你所要做的是创建一个多对多的连接(1种产品可以有很多活动和1个活动可以有很多的产品)。您无法将所有广告系列存储在一列中。做正确的方法是创建一个多对多的加入,这意味着你需要创建一个连接表:

Table PRODUCT: 
Column ID 
Column NAME 

Table CAMPAIGN: 
Column ID 
Column NAME 

Table PRODUCTCAMPAIGN 
Column ProductID 
Column CampaignID 


Product: 
1 | Nike Sneakers 

Campaign: 
1 | Red Shoes 
2 | No laces 
3 | Velcro 
4 | White Shoes 

ProductCampaign 
1 | 1 
1 | 2 
1 | 3 

然后,您可以做

SELECT Product.ID, Campaign.Name 
FROM Product 
INNER JOIN ProductCampaign 
ON   ProductCampaign.ProductID = Product.ID 
INNER JOIN Campaign 
ON   Campaign.ID = ProductCampaign.CampaignID 

这应该给你:

Nike Sneaker | Red shoes 
Nike Sneaker | No laces 
Nike Sneaker | Velcro 

然后,您应该能够让他们逗号分隔。我没有MySQL在我面前帮助你。我认为GROUP_CONCAT应该为你工作。

+0

工作就像一个魅力:)谢谢!现在,如果我想将产品(耐克运动鞋)插入3个广告系列,我该怎么做? –

+0

格雷格与SQL语句不会返回不在广告系列中的产品如何返回这些产品? –

+0

如果要将产品添加到广告系列,只需将记录添加到ProductCampaign表。为了让所有产品成为产品和产品营销之间的左连接 – Greg