/ / JOIN funkcjonalność między wieloma tabelami - sql, sql-server, join, sql-server-2012

JOIN funkcjonalność między wieloma tabelami - sql, sql-server, join, sql-server-2012

Tabele:

Klient

CID    Name
1      A
2      B
3      C
4      D
5      E
6..(And so on)

Odwiedzić

VID CID type
1   1   Med
2   3   Non
3   2   Non
4   6   Med
5   4   Med
6..(And so on)

Zapłata

PID   CID  amount
1      1       10
2      1       20
3      2       30
4      2       40
5      3       50
6..(And so on)

Pożądane wyjście:

CID  Name  type   amount
1     A     Med    10
1     A     Med    20
4     D     Med    NULL
(And so on..)

Pytanie:

SELECT DISTINCT
C.client_id
,C.name
,V.type
,P.payment

FROM Clients C
INNER JOIN Visit V
ON C.cid=V.cid
LEFT JOIN Payment P
ON V.cid=P.cid

Użyłem LEWEGO DOŁĄCZU, ponieważ chcę zobaczyć, kto dokonał płatności, a kto nie.

Pytanie: Czy LEFT JOINS (lub zewnętrzne sprzężenia) przyciągają danena wspólne identyfikatory w CID lewej tabeli wynikające z poprzednich połączeń INNER (wspólny zestaw wyników)? Lub czy uważają ALL identyfikatory w lewej tabeli i zignorować wyniki INNER JOINS w ogóle? Chcę tylko szczegóły dotyczące płatności klientów istniejących w wewnętrznych połączeniach, a nie poza nimi.

Odpowiedzi:

3 dla odpowiedzi № 1

The LEFT JOIN będzie działał tylko w wierszach, w których INNER JOIN zwraca lub common data set jak wspomniałeś.

To bez względu na to, co LEFT JOIN powróci, INNER JOIN ma na celu ograniczenie zestawu wyników Visit V ON C.cid=V.cid

Ten wykres venna pokazuje wyniki, które zostaną wybrane, niebieski obszar to twoje dane, które zostaną zwrócone. Kolejność złączeń nie ma znaczenia.

wprowadź opis obrazu tutaj