【问题标题】:USING rather than ON使用而不是打开
【发布时间】:2013-09-02 20:51:31
【问题描述】:

我正在查看“SQL 标准指南”(C.J.Date/Hugh Darwen) 中关于 LEFT JOIN 的部分,它给出了以下语法:

table-reference [ NATURAL ] outer-join-type
                            JOIN table-reference
                           [ ON conditional-expression   
                           | USING ( column-commalist ) ]

什么是USING
有用吗?
是在SQL-Server中实现的吗?

【问题讨论】:

  • this 应该回答您的第一个问题。和this你的第三个
  • 对于每个 SQL 数据库引擎,都有部分 SQL 标准实现。对于 SQL Server,这是其中之一。
  • @AakashM 我知道不同方言挑选和选择不同部分来实现的情况——只是想从 sql-server 角度了解更多关于这个特定运算符的信息

标签: sql-server


【解决方案1】:

不,SQL Server(或 Sybase)不支持用于连接的 USING 子句。您需要继续使用ON 子句。

在 MSDN connect 上有一个请求,要求它实现 here - 但正如 2006 年提出的但尚未实现的那样,我不会屏住呼吸!

【讨论】:

    【解决方案2】:

    不,SQL Server 不支持,请参阅FROM

    <joined_table> ::= 
    {
        <table_source> <join_type> <table_source> ON <search_condition> 
        | <table_source> CROSS JOIN <table_source> 
        | left_table_source { CROSS | OUTER } APPLY right_table_source 
        | [ ( ] <joined_table> [ ) ] 
    }
    

    至于它是什么?这是一种在两个表之间执行连接的方法,其中两个表中的列名完全匹配,并且为了方便起见,它允许您只命名一次列。将其与使用 ON 来实现相同的效果进行比较:

    ON
       table1.columnA = table2.columnA AND
       table1.columnB = table2.columnB AND
       table1.columnC = table2.columnC
    

    USING 只是:

    USING (columnA,columnB,columnC)
    

    【讨论】:

    • +1 感谢您提供信息;与ON 相比,收益并不大...只是缩短了一些脚本。
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多