Бірнеше кестеге қарапайым қосылуды қалай жүзеге асырамын?

Мен мұнда өте маңызды мәселе екеніне сенімдімін, бірақ өмірім үшін бұл қарапайым бірігуді алмаймын.

Негізінен менің 3 кесте бар:

  • МҮШЕЛЕР (бірінші_атауы, соңғы_атауы),
  • MEMBER_TO_GROUP (member_id, group_id)
  • Төлемдер (member_id, date, amount).

Мен белгілі бір топтағы мүшелерден барлық төлемдерді алуға тырысамын. Тек екі кестені қолдана отырып, MEMBER ақпаратынсыз белгілі бір топтың барлық төлемдерін таба аламын немесе барлық MEMBER ақпаратын ТӨЛЕМ ақпараты жоқ таба аласыз. Дегенмен, мен үшінші кестені қосу әрекетін жасаған кезде, жаман деректер қайтарылады (мысалы, топта мүше емес). Мен пайдаланатын негізгі сұраныс:

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
қосылды