【问题标题】:SQL join using USING: <column name> is not a recognized table hints option使用 USING 的 SQL 连接:<column name> 不是可识别的表提示选项
【发布时间】:2015-12-05 10:41:21
【问题描述】:

我有以下 JOIN:

SELECT * FROM tableA INNER JOIN tableB USING (commonColumn)

我收到一个错误:

“commonColumn”不是公认的表格提示选项。如果是 旨在作为表值函数的参数或 CHANGETABLE 函数,确保你的数据库兼容模式是 设置为 90。

以下替代方法有效:

SELECT * FROM tableA INNER JOIN tableB ON tableA.commonColumn = tableB.commonColumn

在我的例子中,兼容性级别设置为 100 (SQL Server 2008),而顺便说一下,我正在使用 SQL Server 2012。

我做错了什么?我发现很难找到使用关键字USING 的示例,因为几乎不可能进行相关的网络搜索。然而,当“连接列”具有相同名称时,使用它似乎是正确的......

【问题讨论】:

  • 我怀疑 SQL Server 是否支持USING。我没见过。
  • USING (commonColumn) 不是 SQL SERVER 语法
  • ANSI SQL,但不是 MS SQL。
  • @w0lf 我明白了。我想知道为什么我没有得到关键字 USING 的错误 then...
  • @Antonio 找到了!见stackoverflow.com/q/16616988/390819

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

USING 不受 SQL Server 语法支持。它也不是reserved keyword,因此查询引擎将其用作表别名。

它是一个 ODBC 关键字,但它们的处理方式有所不同。如果您使用它们,引擎不会总是抱怨,但无论如何您都不应该使用它们。

它也被列为未来可能的保留关键字。新版本的 SQL Server 将单词添加到核心保留列表是很常见的。

就个人而言,我没有看到他们添加 NATURAL JOIN 语法支持,即使使用 USING。许多 DBA 认为 NATURAL JOIN 存在问题。

【讨论】:

  • 棘手,ANSI SQL 规范将 USING 保留为保留。
  • 不是“ODBC 关键字”,这是 SQL 标准中定义的用于定义连接列的关键字。
  • @a_horse_with_no_name Microsoft 在我提供的链接中将其称为 ODBC 关键字。如果您不喜欢这些术语,请与他们交谈。
【解决方案2】:

USING 关键字用于指定the documentationMERGE 语句(称为&lt;table source&gt;)的源数据。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多