2014-02-24 31 views
1

我有一張表列出了他們已經吃過的食物並列出了他們的食物。我希望運行一個查詢,該查詢爲我提供了所有人員以及每個用逗號分隔的已分配食物的字符串:來自一個表的MySQL結果以及來自另一個數據的單個字符串

例如,

name gender age personID 
dave male 30 1 
tom  male 40 2 
chloe female 20 3 

食品

food personID 
fish 1 
chips 1 
salad 1 
tomato 2 
fish 3 
pizza 3 

而對於這個給我:

name gender age personID food 
dave male 30 1   fish,chips,salad 
tom  male 40 2   tomato 
chloe female 20 3   fish,pizza 

我猜是這樣的:

select people.*, (select concat(food,',') from food where food.personID=people.personID) food from people 
+0

上述查詢返回「子查詢返回多個1行」 – Chris

回答

1

您將需要一個JOIN以及MySQL的GROUP_CONCAT()聚合函數,其目的完全是您的用逗號分隔的列表的預期結果,並按您的SELECT列表中的所有其他列進行分組。

請注意,我在此處使用的是LEFT JOIN,因此無論其是否在food中有任何相關記錄,都會返回此人的詳細信息。

SELECT 
    name, 
    gender, 
    age, 
    p.personID, 
    GROUP_CONCAT(food) AS foods 
FROM 
    people p 
    LEFT JOIN food f ON p.personId = f.personID 
GROUP BY 
    name, 
    gender, 
    age, 
    p.personID 

這裏是一個演示:http://sqlfiddle.com/#!2/13aab/3

相關問題