2016-10-20 69 views
0

我必須在3個表格上使用LEFT JOINUNITS,ROOMS_CHECK_INCOMMENTS。基本上我想顯示UNITS和每個房間的入住單位數和評論數。但是當我運行房間檢查和評論計數時,我得到的是相同的4位數字。如果我用單獨的左連接分開2個查詢,它可以正常工作。左邊加入3張桌子?

下面是查詢:

SELECT u.ID, 
     u.unit_name, 
     count(c.checkin_status) as total_chekin , 
     count(com.ID) as total_comment , 
     h.hospital_name 
FROM HOSPITALS h, UNITS u 
LEFT OUTER JOIN ROOMS_CHECK_IN c ON c.unit_id = u.ID AND c.room_status=0 
LEFT OUTER JOIN COMMENTS com ON com.unit_id = u.ID 
WHERE h.ID = u.hospital_id AND u.hospital_id=3 
GROUP BY u.ID; 

請幫助。

+0

推廣使用顯式的'JOIN' sintaxis,阿龍貝特朗寫了一篇很好的文章[不良習慣踢:使用舊式JOINs](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)。 –

回答

2

從不FROM條款中使用逗號。 始終使用明確使用JOIN上下文。

然後,你可能想count(distinct)(或前聚集聯接):

SELECT u.ID, u.unit_name, 
     count(distinct c.checkin_status) as total_chekin, 
     count(distinct com.ID) as total_comment, 
     h.hospital_name 
FROM HOSPITALS h JOIN 
    UNITS u 
    ON h.ID = u.hospital_id LEFT OUTER JOIN 
    ROOMS_CHECK_IN c 
    ON c.unit_id = u.ID AND c.room_status = 0 LEFT OUTER JOIN 
    COMMENTS com 
    ON com.unit_id = u.ID 
WHERE u.hospital_id = 3 
GROUP BY u.ID, u.unit_name, h.hospital_name; 
+0

爲什麼你認爲'DISTINCT'是相關的?我認爲只添加'unit_name'和'hostpital_name'就足夠了 –

+0

@JuanCarlosOropeza。 。 。 'count()'計數非NULL值的數量。這可能是一樣的。我認爲,當「加入」生產笛卡爾產品時,OP要求每個維度都有不同的計數。 –

+0

非常感謝您的回答,是的沒有DISTINCT我得到笛卡爾產品。 – maddie