2017-05-18 153 views
1

我有三個表稱爲customers,customer_contacts,customer_sites。Mysql加入查詢與外鍵關係的三個表

客戶表:

enter image description here

Customer_contacts:

enter image description here

Customer_sites:

enter image description here

我想要的如果在其他兩個表中沒有相關數據,則顯示客戶數據。但是,使用我的查詢我沒有得到結果。 下面是查詢:

SELECT c.id,c.customer_code,c.customer_name,count(cs.customer_id) as count, cc.name,cc.email,cc.phone 
from customers as c 
left join customer_sites as cs on cs.customer_id = c.id 
left join customer_contacts as cc on cc.customer_id = c.id 
where cc.is_main =1 group by cc.id 

結果我m到處:

enter image description here

但我不是所有得到只有兩行數據。如果其他表中沒有數據,我需要顯示所有數據。請提供任何建議。

+1

將where子句移動到CC的連接。 where子句基本上消除了左連接創建的空值;使左連接像內連接一樣工作。用'和'替換'where',你很好。我也沒有列出選擇中未聚合的所有字段,因此不是組的大粉絲。所以我會將這些未彙總的字段添加到組中。 – xQbert

+0

@xQbert:我已經做了更換,其中有和,投擲錯誤我:( – 06011991

+1

'GROUP BY c.id ,c.customer_code ,c.customer_name ,cc.name ,cc.email ,cc.phone '以前版本的mySQL默認使用group by extensions。當前版本禁用了該功能,所以現在引擎要求您列出group by中select所有非聚合字段(除非您重新啓用該功能)但我從來沒有真正發現它的價值,因爲它給予了一個設計良好的數據庫/查詢 – xQbert

回答

1

的地方添加到您的從句:

SELECT c.id,c.customer_code,c.customer_name,count(cs.customer_id) as count, cc.name,cc.email,cc.phone 
from customers as c 
left join customer_sites as cs on cs.customer_id = c.id 
left join customer_contacts as cc on cc.customer_id = c.id and cc.is_main =1 
group by cc.id 

如果你不這樣做,你的left join將是一個inner join

也不能使用select子句中的列,它們不在聚合函數中,也不在Group by子句中。

+0

它給出的錯誤:( – 06011991

+0

@ 5367683和消息是? – Jens

+0

錯誤代碼:1055。SELECT的表達式#1列表不在GROUP BY子句中,並且包含非聚集列'mac.c.id',它在功能上不依賴於GROUP BY子句中的列;這與sql_mode = only_full_group_by不兼容 ' – 06011991