【问题标题】:HSQL 2.3.6 outer join syntaxHSQL 2.3.6 外连接语法
【发布时间】:2020-09-14 09:17:28
【问题描述】:

我使用 HSQL 2.3.6,我想使用以下语法进行连接:

SELECT A.REF FROM TableA A, TableB B
WHERE A.NUM = B.NUM (+)

但在文档中(我的 HSQL 的最新版本)http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_joined_table 的语法是:

<joined table> ::= <cross join> | <qualified join> | <natural join>

<qualified join> ::= <table reference> | [ <join type> ] JOIN <table reference> <join specification>

<join specification> ::= <join condition> | <named columns join>

<join condition> ::= ON <search condition>

<join type> ::= INNER | <outer join type> [ OUTER ]

<outer join type> ::= LEFT | RIGHT | FULL

<join column list> ::= <column name list>

我的语法是SQLSyntaxErrorException,我认为这是因为我的语法不兼容。

但没有我的 HSQL 版本的文档,我不确定。你确认了吗?

提前谢谢你

【问题讨论】:

  • 我认为2.0手册实际上意味着2.x
  • HSQLDB 2.3.6 版是 HSQLDB 2.4.1 的 JDK 6 兼容版本。更高版本中现有的 SQL 语法没有变化。您可以在此处下载 2.4.1 文档:sourceforge.net/projects/hsqldb/files/hsqldb
  • (+) 是 Oracle 在 80 年代遗留下来的,当时 SQL-92 还不存在。避免使用这种旧语法,因为它有很多限制并且在其他任何地方都不起作用。

标签: sql join hsqldb outer-join


【解决方案1】:

(+) 是 Oracle 专有的外连接运算符(仅 Oracle 支持),甚至 Oracle 建议停止使用它。

HSQLDB 支持标准的 LEFT JOIN

SELECT ...
FROM TableA A
  LEFT JOIN TableB B on A.NUM = B.NUM;

(不确定我的方向是否正确,我已经几十年没有使用 Oracle 的 (+) 运算符了)

【讨论】:

    【解决方案2】:

    永远不要FROM 子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。

    您正在为外连接使用古老的定制语法。我想你想要:

    SELECT A.REF
    FROM TableA A LEFT JOIN
         TableB B
         ON A.NUM = B.NUM;
    

    您的查询可能过于简单。正如所写,可能不需要外连接:

    SELECT A.REF
    FROM TableA A ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2011-06-02
      • 2020-06-12
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多