2017-06-19 162 views
0

我有3个表一对多只返回一个结果

表1: PRODUCT_ID 名 描述

表2: CATEGORY_ID 名 描述

表3: PRODUCT_ID CATEGORY_ID

我试图cr使用以下数据选择一个表的查询:product_name,product_description,product_category

事情是每行应包含多个product_category,但查询只返回一个。

这里的查询,如果你能请让我知道什么部分是不正确

SELECT table1.name AS product_name, 
     table1.description AS product_description, 
     table2.name AS product_category 
FROM table1 INNER JOIN 
    table3 
    ON table3.product_id = table1.product_id INNER JOIN 
    table2 
    ON table2.category_id = table3.category_id; 

结果我得到的是:

product_name - product_description - product_category 
NAME 1 -  Description 1  -  Category 1 
NAME 2 -  Description 2  -  Category 2 

林瞄准了这样的事情:

product_name - product_description - product_category 
NAME 1 -  Description 1   -  Category 1 
              Category 2 
              Category 5 

NAME 2 -  Description 2  -  Category 7 
             Category 2 
             Category 1 

回答

0

我已经找到了答案都归功于@Gordon Linoff所有我需要做的是对的product_id添加到分组

这里的查询:

SELECT t1.name AS product_name, 
t1.description AS product_description, 
GROUP_CONCAT(t2.name) AS product_category 
FROM table1 t1 INNER JOIN 
table3 t3 
ON t3.product_id = t1.product_id INNER JOIN 
table2 t2 
ON t2.category_id = t3.category_id 
GROUP BY t1.product_id, t1.name, t1.description; 

谢谢!

1

如果您想在一行中使用多个产品类别,那么请考虑“聚合”:

SELECT t1.name AS product_name, 
     t1.description AS product_description, 
     GROUP_CONCAT(t2.name) AS product_category 
FROM table1 t1 INNER JOIN 
    table3 t3 
    ON t3.product_id = t1.product_id INNER JOIN 
    table2 t2 
    ON t2.category_id = t3.category_id 
GROUP BY t1.name, t1.description; 
+0

非常感谢你,我认为这让我非常接近,但它仍然只返回一个table3.name,而它应该返回更多,如描述中所述 – jukerok

+0

@jukerok。 。 。你的评论没有意义。 'table3'没有名为'name'的列。 –

+0

我的坏我的意思是table2.name – jukerok