2017-06-19 158 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