1

2つのテーブルがあります。

最初のテーブルはメンバーテーブルです

MEMBER TABLE
ID    |  NAME
1     |  User
2     |  Another User
3     |  Some other User

2番目のテーブルは友達です

FRIENDS TABLE
ID    |  member_id    |  Friend Name    |  Notified
1     |  1            |  Friend #1      |  0
2     |  1            |  Friend #1      |  1
3     |  2            |  Friend #1      |  0
4     |  1            |  Friend #1      |  1
5     |  2            |  Friend #1      |  1

私がやりたいのは、メンバーテーブルの情報を取得するだけでなく、各メンバーの通知された友達の総数を取得することです。

私が今までやってきたことはそれです

SELECT
    M.ID
    M.NAME
    COUNT(F.notified)
FROM
    MEMBER AS M
LEFT JOIN
    FRIENDS AS F
ON
    F.member_id = M.id
WHERE
    F.notified = 1
GROUP BY
    M.id

しかし、これは私にはうまくいきません。なぜなら、通知されていない友達がいるメンバーがいる場合、クエリは結果に含まれないからです。

たとえば、上記のコードでは、ID3のメンバーは私の結果に含まれません。

通知された友達がいないメンバーでも返すために、そのクエリを変更する方法について何かアイデアはありますか?

よろしくメリアーノスニコス

4

2 に答える 2

5

WHERE F.notified = 1条件により結合がキャンセルされLEFT、結合として機能しINNERます。条件をjoiningON句に移動します。

SELECT
    M.ID
    M.NAME
    COUNT(F.member_id)
FROM
      MEMBER AS M
  LEFT JOIN
      FRIENDS AS F
    ON
      F.member_id = M.id
    AND
      F.notified = 1
GROUP BY
    M.id ;
于 2012-07-07T08:40:14.100 に答える
3

あなたはこのようにサブクエリでそれを行うことができます:

SELECT
    M.ID,
    M.NAME,
    (SELECT  COUNT(F.notified) FROM FRIENDS AS F WHERE F.member_id = M.id AND F.notified = 1) AS NUMFRIENDS
FROM
    MEMBER AS M 
GROUP BY
    M.id
于 2012-07-07T08:41:02.987 に答える