代码之家  ›  专栏  ›  技术社区  ›  Carra

Sql server-具有两个联接的内部联接语法

  •  1
  • Carra  · 技术社区  · 6 年前

    我注意到我们的一个程序员写了这样一段话:

    SELECT * FROM Table_A A
      INNER JOIN Table_B B
        INNER JOIN Table_C C
          ON C.Id = B.Id
            ON B.Id = A.Id
    

    这和普通的连接语法一样吗?我找不到文件。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Damien_The_Unbeliever    6 年前

    对。我通常建议人们这样想 JOIN ( ON 与右括号的作用相同 ) 哪一个 打开 哪一个 ,并为确定作用域中的表名/别名提供一些上下文。

    所以这个查询有效地连接表 B C ,然后连接 A 那个 综合结果。

    INNER JOIN 你可以很容易地重新排列表格,这样你就可以遵循更“正常”的规则 加入 / / / 模式。从这个查询得到相同的逻辑结果 1个

    SELECT *
    FROM Table_B B
    INNER JOIN Table_C C
      ON C.Id = B.Id
    INNER JOIN  Table_A A
      ON B.Id = A.Id
    

    注意这个 documentation ,如果您仔细阅读过:

    <table_source> ::=   
    {  
        table_or_view_name [ [ AS ] table_alias ]   
            [ <tablesample_clause> ]   
            [ WITH ( < table_hint > [ [ , ]...n ] ) ]   
        ...
        | <joined_table>
        ...
    

    <joined_table> ::=   
    {  
        <table_source> <join_type> <table_source> ON <search_condition>
        ...
    

    所以,在 <joined_table> ,左边是什么 <join_type> ? 任何 <table_source> . 右边是什么 < ? 任何 < . 事实上,它们中的任何一个或两个都可以 <

    <已加入表> 在另一个人的左手边 < .


    1个 秩序 而不是列 姓名 ,由于使用 SELECT * . 但你不应该依赖列顺序。