2016-10-20 5 views
0

UNITSROOMS_CHECK_INCOMMENTSの3つのテーブルでLEFT JOINを使用する必要があります。基本的に私はUNITSを表示したいと思うし、部屋の各ユニット数のチェックインとコメントのカウント。しかし、私は部屋のチェックインとコメントカウントのために実行しているときに私は同じ4桁の番号を取得しています。 1つの左結合で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

関連する問題