/ / ПРИЄДНАЙТЕ функціональність між кількома таблицями - sql, sql-сервер, приєднуйтесь, sql-сервер-2012

JOIN функціональність між кількома таблицями - sql, sql-server, join, sql-server-2012

Таблиці:

Клієнт

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 для відповіді № 1

The LEFT JOIN буде працювати лише на рядах, що INNER JOIN повертає, або common data set як ви згадуєте

Це незалежно від того, що LEFT JOIN повернеться INNER JOIN обмежить встановлений результат на основі Visit V ON C.cid=V.cid

Ця діаграма venn показує результати, які будуть обрані, синя область - це ваші дані, які будуть повернуті. Порядок з'єднань значення не має.

введіть опис зображення тут