1

特定のSQLクエリに関して少し問題があります。2つのテーブルのデータを結合する必要がありますが、3番目のテーブルを使用してデータを制限します(必ずしもデータを取得する必要はありません)。表は次のとおりです。

    MEMBERS(member_id,first_name,last_name)
    MEMBERS_GROUPS(member_id,group_id)
    CHARGES(charge_id,member_id,charge_amount,status)

特定のグループのすべてのメンバーのすべての料金を検索する必要がありますが、MEMBERSテーブルから名前と名前も取得したいと思います。私がこれまでに思いついたクエリは次のとおりです。

select c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1

私も試しました:

SELECT c.*, m.first_name, m.last_name 
FROM charges c, members_groups mg, member m 
WHERE c.member_id=mg.member_id 
   AND mg.group_id = 1 
   AND c.status='Valid' 
   AND c.member_id = m.member_id

…しかし、どちらも必要なデータを返しません。私はこれを考えすぎていると確信していますが、私は一生の間正しい値を取得することはできません。デカルト積のように見えるものを取得し続けます-それにもかかわらず、それは明らかに多すぎる行と悪いデータを返しています。

4

1 に答える 1

0

おそらく、必要なのは、INNERJOINを次members_groupsの行に制限することですmg.member_id = m.member_id

SELECT c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1
    AND mg.member_id = m.member_id
于 2011-08-13T21:38:00.120 に答える