2014-04-25 78 views
0

我正在嘗試使用以下4個表創建LEFT JOIN。 這個想法是顯示用戶id的parent.name。如果用戶不在子用戶表中,應該對子用戶名進行groupconcat。child.name應爲NULLMysql LEFT JOIN沒有回到預期的結果

以下是用戶標識1的預期結果:

id  parentname childname 
------------------------------------------------- 
    1  parent1  child1,child3 

下面是用戶ID 2預期的結果: 該用戶在childusers表不存在,所以它應該返回null

id  parentname childname 
------------------------------------------------- 
    1  parent2  NULL 

表:

id  parentname 
-------------------------------------------- 
    1  parent1 
    2  parent2 
    3  parent3 

孩子

id  childname  parent_id 
----------------------------------------------- 
    1   child1  1 
    2   child2  2 
    3   child3  1 

parentusers

id  parent_id user_id 
------------------------------------------------------- 
    1   1   1 
    2   2   2 
    3   3   1 

childusers

id  child_id user_id 
------------------------------------------------------- 
    1   1   1 

這裏是我的查詢:

SELECT parent.name AS parentname, 
GROUP_CONCAT(child.name SEPARATOR ',') AS childname 
FROM parentusers,parent 
LEFT JOIN child 
ON parent.id=child.parent_id 
WHERE parentusers.parent_id= parent.id 
AND parentusers.user_id='1' 
GROUP BY parent.id 

我已經寫了兩個單獨的查詢,但希望將上述結果格式中的這兩個單獨結果結合起來。

select parent.parentname from parent,parentusers 
where parent.id=parentusers.parent_id 
and parentusers.user_id=1 ; 

select GROUP_CONCAT(child.childname) as childname from child 
LEFT JOIN childusers 
ON child.id=childusers.child_id 
where childusers.user_id=1; 

謝謝..

+0

預期的結果,我們能獲得這樣的一個sqlfiddle? –

+0

這裏是小提琴http://sqlfiddle.com/#!2/8ffaa/3 – user1851420

+0

請覈對幫我 – user1851420

回答

0

最後我從下面的查詢

SELECT * FROM (SELECT parent.parentname AS parentname, 
parent.id AS parentid 
FROM parent,parentusers 
WHERE parent.id=parentusers.parent_id 
AND parentusers.user_id='2') parentdata 
LEFT JOIN 
(SELECT GROUP_CONCAT(child.childname SEPARATOR ',') AS childname, 
GROUP_CONCAT(child.id SEPARATOR ',') AS childid 
FROM parent 

LEFT JOIN parentusers 
ON parent.id=parentusers.parent_id 

LEFT JOIN child 
ON child.parent_id=parent.id 
AND child.parent_id=parentusers.parent_id 

LEFT JOIN childusers 
ON child.id=childusers.child_id 

AND childusers.user_id=parentusers.user_id 
WHERE childusers.user_id='2' 
GROUP BY parent.id) childdata 
ON parentdata.parentid=childdata.childid 

http://sqlfiddle.com/#!2/8ffaa/50

0

我看到您的查詢以下錯誤:

  1. 有一個語法錯誤(多餘的逗號)bofore FROM條款。

  2. 您給表child的別名命名爲sub然後您嘗試加入child.parent_id

試試這個:

SELECT parent.name AS parentname, IFNULL(GROUP_CONCAT(child.name),'') AS childname 
FROM parentusers LEFT JOIN 
    parent ON parentusers.parent_id=parent.id LEFT JOIN 
    child sub ON parent.id=sub.parent_id 
WHERE parentusers.user_id='1' 
GROUP BY parent.id 

修改我做(除了糾錯):

  1. 使用一個LEFT JOIN聯合表parentusersparent

  2. 添加IFNULL如果GROUP_CONCAT爲空,它將返回一個空字符串。

+0

感謝,將嘗試然後送還給你 – user1851420

+0

錯誤在查詢父表修正 – user1851420

+0

沒有使用,但parent.id是那裏的加入 – user1851420