Birden çok tabloya nasıl basit bir katılım gerçekleştiririm?

Eminim ki burada oldukça düzeltici bir soru var, ama hayatımın işe yaraması için bu basit katılımı alamıyorum.

Temel olarak 3 tablom var:

  • ÜYELİK (first_name, last_name),
  • MEMBER_TO_GROUP (member_id, group_id)
  • ÖDEMELER (member_id, tarih, miktar).

Belirli bir gruptaki üyelerin tüm ödemelerini almak istiyorum. Tablolardan sadece ikisini kullanarak, ÜYE'nin bilgisi olmaksızın belirli bir grubun tüm ÖDEMELERINI bulabilirim veya ÖDEME bilgileri olmadan tüm ÜYE bilgilerini bulabilirim. Ancak, üçüncü tabloyu eklemeye çalıştığımda, hatalı veriler döndürülür (örneğin, grupta olmayan üyeler alırım). Kullanmakta olduğum temel sorgu budur:

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

Bağlantının nerede olduğu konusunda emin değilim, fakat herhangi bir yardım en çok takdir edilecektir.

2
ANSI katılma sözdizimini kullanma alışkanlığına girin (galador'un cevabı gibi). Okumak daha kolaydır ve genellikle mantıksal hatalarınızı vurgular.
katma yazar Nick Chammas, kaynak
@Nick, bu SQL89. Açık JOIN SQL92 ... :-)
katma yazar gbn, kaynak
Burada kullanılanlar gibi örtülü birleşimler bir SQL antipatternidir. Bu kötü sözdizimi 1992'de yerini okumak ve sürdürmek için daha kolay bir şeyle değiştirdi ve kazara çarpışan birleşme olasılığı çok daha azdı.
katma yazar HLGEM, kaynak

1 cevap

Bence istediğini almalısın:

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
katma