使用ANSI连接时子查询中的条件

时间:2009-10-16 08:30:21

标签: oracle join ansi ora-00900

为什么不起作用?

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual WHERE 1=1) b
     ON (1=1);

我得到“ORA-00900:无效的SQL语句”。 有没有办法在子查询中使用WHERE子句?

编辑:版本9.2

SELECT *
FROM v$version

Oracle9i企业版9.2.0.8.0版 - 64位生产

以下执行得很好:

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual /*WHERE 1=1*/) b
     ON (1=1)

4 个答案:

答案 0 :(得分:1)

您使用的是哪个版本?

完全相同的SQL对我来说很好(Oracle数据库10g快捷版10.2.0.1.0版)。

答案 1 :(得分:1)

9i以下的Oracle不支持ANSI加入语法。

如果您在8i及以下位置使用此功能:

SELECT  a.*
FROM    dual a,
        (
        SELECT  *
        FROM    dual
        WHERE   1 = 1
        ) b
WHERE   1 = 1

答案 2 :(得分:1)

它适用于9.2(32位版本是唯一的区别):

SQL> SELECT a.*
  2  FROM dual a
  3       JOIN (SELECT * FROM dual WHERE 1=1) b
  4       ON (1=1);

D
-
X

SQL> quit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

答案 3 :(得分:0)

它看起来对我来说是正确的,我可以在10g中执行它,但它失败了8i,你使用的是哪个版本的Oracle?