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 № 1The 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.