【问题标题】:JOIN functionality between multiple tables多个表之间的 JOIN 功能
【发布时间】:2017-01-21 12:12:34
【问题描述】:

表格:

客户

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 结果? 我只想要存在于内部联接而不是外部联接中的客户的付款详细信息。

【问题讨论】:

    标签: sql sql-server join sql-server-2012


    【解决方案1】:

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

    也就是说,不管LEFT JOIN 会返回什么,INNER JOIN 都会限制基于Visit V ON C.cid=V.cid 的结果集

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

    【讨论】:

    • 这也是为什么它们一起使用的顺序很重要的原因吗?意思是我试图获得结果的方式中的左连接应该是在所有内部连接之后?
    • 在“ON”子句如何定义它们以及从什么到哪个表的意义上很重要,但是查询中出现的顺序无关紧要,只有记录的逻辑匹配。
    • @AmulyaSharma 答案已更新,附有希望有用的图表。
    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多