2011-10-27 15 views
2

私は確かに是正措置の質問がここにあるが、私は私の人生のためのこの単純な結合を働かせることはできません。複数のテーブルで単純な結合を実行するにはどうすればよいですか?

  • MEMBERS(FIRST_NAME、LAST_NAME)、
  • MEMBER_TO_GROUP(MEMBER_ID、GROUP_ID)
  • 支払い(MEMBER_ID、日付、金額):

    は基本的に、私は3つのテーブルを持っています。

特定のグループのメンバーからのすべての支払いを取得しようとしています。テーブルのうちの2つだけを使用することで、特定のグループのすべての支払いをメンバー情報なしで見つけることができます。または、支払い情報なしですべてのメンバー情報を見つけることができます。しかし、3番目のテーブルを追加しようとすると、不正なデータが返されます(たとえば、グループにないメンバーを取得するなど)。これは、私が使用している基本的なクエリです:

SELECT 
    p.*, 
    m.first_name, 
    m.last_name 
FROM 
    members m, 
    payments p, 
    member_to_group mg 
WHERE 
    mg.group_id = 12 
    AND mg.member_id = p.member_id 
    AND m.member_id = p.member_id 

私はどこに切断されているかは分かりませんが、どんな援助でも大歓迎です。

+1

ANSIを使用しての習慣に取得するには、(galadorの答えのように)結合構文を。読むのが簡単で、論理的な誤りがしばしば強調されます。 –

+2

@Nick、これはSQL89です。 Explicit JOINはSQL92です。:-) – gbn

+0

ここで使用されているような暗黙的な結合は、SQLの反パターンです。この誤った構文は、1992年に読んだり保守したり、誤った相互結合を起こす可能性が少なくなるように置き換えられました。 – HLGEM

答えて

2

私は、これはあなたが望むものを手に入れるべきだと思う:

SELECT p.*, 
     m.first_name, 
     m.last_name 
FROM payments p 
INNER JOIN members m 
    ON m.member_id = p.member_id 
INNER JOIN member_to_group mg 
    ON mg.member_id = m.member_id 
WHERE mg.group_id = 12 
関連する問題