Таблиці:
Клієнт
CID Name
1 A
2 B
3 C
4 D
5 E
6..(And so on)
Відвідайте
VID CID type
1 1 Med
2 3 Non
3 2 Non
4 6 Med
5 4 Med
6..(And so on)
Оплата
PID CID amount
1 1 10
2 1 20
3 2 30
4 2 40
5 3 50
6..(And so on)
Бажаний результат:
CID Name type amount
1 A Med 10
1 A Med 20
4 D Med NULL
(And so on..)
Запит:
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
Я скористався ЛІВОГО ПРИЄДНАННЯ, бо хотів побачити, хто здійснив платежі, а хто не "т.
Питання: Чи ліві з'єднання (або зовнішні з'єднання) тягнуть на основі данихпро загальний id "s у CID лівої таблиці, що виникає внаслідок попереднього INNER JOINS (Загальний набір результатів)? Або вони вважають ВСІ ідентифікатори в лівій таблиці та взагалі ігнорують результати INNER JOINS? Мені потрібно лише платіжні реквізити клієнтів, які існують у внутрішніх з'єднаннях, а не поза ними.
Відповіді:
3 для відповіді № 1The LEFT JOIN
буде працювати лише на рядах, що INNER JOIN
повертає, або common data set
як ви згадуєте
Це незалежно від того, що LEFT JOIN
повернеться INNER JOIN
обмежить встановлений результат на основі Visit V ON C.cid=V.cid
Ця діаграма venn показує результати, які будуть обрані, синя область - це ваші дані, які будуть повернуті. Порядок з'єднань значення не має.