2017-07-31 4 views
1

この小さな問題の解決策を見つけるには何か問題があります。私はチームの数を得たいと思っていましたし、ゼロカウントも必要でした。特定のチームについて言及していない場合、これは機能しています。しかし、クエリが複雑になったときには動作しませんでした。SQLクエリが機能しません。 Countもゼロを返さなければなりません。しかし、外部結合後も動作しません。

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins" 
FROM checkins 
    RIGHT JOIN teams ON checkins.team_id = teams.id 
    WHERE checkins.team_id IN ('1','3','2') 
GROUP BY checkins.team_id 
+1

それはTEAM_ID上だとあなたが行ってもいいでしょうので、WHERE条件のために、あなたの右端のテーブルを使用します。 'どこのチーム.id IN(1,3,2)'。 'teams'テーブルのすべてのチームを望むなら、それを' LEFT OUTER JOIN checkins'チームに切り替え、ON句に制限を入れてください。 'ON teams.id = checkins.team_id AND checkins.team_id in(1,3、 2) ' – JNevill

+0

矛盾するタグは、訂正してください。 – KtX2SkD

+0

@ KtX2SkDありがとう。 –

答えて

0

のように変更されたときに

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins" 
FROM checkins 
    RIGHT JOIN teams ON checkins.team_id = teams.id 
GROUP BY checkins.team_id 

これは希望に動作することができなかったあなたはこれを試すことができます。

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins" 
FROM checkins 
    RIGHT JOIN teams ON checkins.team_id = teams.id 
    WHERE (checkins.team_id IN (1,3,2) OR checkins.team_id IS NULL) 
GROUP BY checkins.team_id 
2

を意図したとおり、この作品、それがこの

SELECT teams.name, COUNT(checkins.team_id) AS "count of checkins" 
FROM checkins 
    RIGHT JOIN teams ON checkins.team_id = teams.id 
    WHERE checkins.team_id IN (1,3,2) 
GROUP BY checkins.team_id 
2

することができますWHERE IN ...を移動するON句への条件は:

SELECT 
    teams.name, 
    COUNT(checkins.team_id) AS "count of checkins" 
FROM checkins 
RIGHT JOIN teams 
    ON checkins.team_id = teams.id AND checkins.team_id IN (1,3,2) 
GROUP BY checkins.team_id 

最新の変更がカウントを変更している理由は、凝集が起こる前WHERE句は、レコードを濾過していることです。すべてをON句に移動することで、結合は、結合の右側のすべての元のレコードを集約に保持します。

しかし、我々はLEFT JOINではなく、右のいずれかを使用して、このクエリを記述しますほとんどの時間:

SELECT 
    teams.name, 
    COUNT(checkins.team_id) AS "count of checkins" 
FROM teams 
LEFT JOIN checkins 
    ON teams.id = checkins.team_id AND checkins.team_id IN (1,3,2) 
GROUP BY checkins.team_id 
関連する問題