多个表之间的JOIN功能

时间:2016-09-13 19:35:02

标签: 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

我使用LEFT JOIN,因为我想知道谁付款而谁没有付款。

问题: LEFT JOINS(或外部联接)是否根据前一个INNER JOINS(公共结果集)产生的左表CID中的公共ID来提取数据?或者他们是否考虑左表中的所有id并完全忽略INNER JOINS结果? 我只想要内部联接中存在的客户端的付款细节,而不是在其外部。

1 个答案:

答案 0 :(得分:3)

LEFT JOIN只会在INNER JOIN返回的行上运行,或者在您提及的common data set上运行。

无论LEFT JOIN将返回什么,INNER JOIN将根据Visit V ON C.cid=V.cid

限制结果集

此维恩图显示将被选中的结果,蓝色区域是您将返回的数据。连接的顺序无关紧要。

enter image description here