複数のテーブルに対して簡単な結合を実行するにはどうすればよいですか?

私は確かにここでの是正の質問であるが、私は私の人生のためのこの単純な結合を働かせることはできません。

基本的に、私は3つのテーブルがあります:

  • メンバー(first_name、last_name)、
  • MEMBER_TO_GROUP(member_id、group_id)
  • 支払い(member_id、日付、金額)。

私は、特定のグループのメンバーからのすべての支払いを取得しようとしています。テーブルのうちの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

私は切断がどこにあるのか分からないが、どんな援助も最も感謝するだろう。

2
ガリレオの答えのように、ANSI結合構文を使用する習慣を身につけてください。読むのが簡単で、論理的な誤りがしばしば強調されます。
追加された 著者 Nick Chammas,
@Nick、これはSQL89です。明示的なJOINはSQL92です:...-)
追加された 著者 gbn,
ここで使用されているような暗黙的な結合は、SQLの反パターンです。この誤った構文は、1992年に読んだり保守したり、誤った相互結合を起こす可能性が少なくなるように置き換えられました。
追加された 著者 HLGEM,

1 答え

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

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
2
追加された