0

複数のテーブルに参加しました。このデモでは、テーブルと MySQL クエリを見つけることができます。

これらはテーブルです:

  1. ユーザー

    id name
    1  abc
    2  xyz
    3  pqr
    
  2. 友達

    user_id friend_id
    1       2
    1       3
    2       3
    
  3. コレクション

    id user_id friend_id amount
    1  1        2         100
    2  2        1        -100
    3  2        3         200
    4  3        2        -200
    5  1        3         300 
    6  3        1        -300
    
  4. 明細書

    id use_id(bill_creator)
    1   1
    2   2
    3   2
    
  5. 請求者

    id  bill_id user_id
    1  1        1
    2  1        2
    3  1        3
    4  2        2
    5  2        3
    6  3        2
    6  3        1
    

これまでのところ、次のクエリを作成しました。

SELECT mf.id
     , mf.name
     , c.amount AS amount,count(bp.user_id) AS no_common_bills
  FROM (
         SELECT fr.user_id AS user_id
              , fr.friend_id AS friend_id
           FROM friend fr
           JOIN users fru
             ON fru.id = fr.user_id
          WHERE fru.id IN (1)
          UNION
         SELECT fl.friend_id AS user_id
              , fl.user_id AS friend_id
           FROM friend fl
           JOIN users flf
             ON flf.id = fl.friend_id
          WHERE flf.id IN (1)
       ) f
  JOIN users mf
    ON mf.id = f.friend_id
  LEFT
  JOIN collection c
    ON c.friend_id = mf.id
   AND c.user_id = f.user_id
  LEFT JOIN bill_person bp 
    ON bp.user_id=f.user_id AND c.friend_id = mf.id
 GROUP BY mf.id
 ORDER BY mf.id

このクエリの私の出力

id   NAME AMOUNT NO_COMMON_BILLS
2    XYZ   100    2
3    PQR   300    2

しかし、私はこの結果が欲しい:

id   NAME AMOUNT NO_COMMON_BILLS
2    XYZ   100    2
3    PQR   300    1

NO_COMMON_BILLSで間違った出力が得られます。それ以外は、すべての値が正しいです。

4

1 に答える 1