1

为什么它不起作用?

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

4 回答 4

1

你用的是什么版本?

完全相同的 SQL 对我来说工作正常(Oracle 数据库 10g 快捷版版本 10.2.0.1.0)。

于 2009-10-16T08:40:17.243 回答
1

下面的 Oracle9i不支持ANSI连接语法。

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

SELECT  a.*
FROM    dual a,
        (
        SELECT  *
        FROM    dual
        WHERE   1 = 1
        ) b
WHERE   1 = 1
于 2009-10-16T08:47:52.867 回答
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
于 2009-10-16T16:48:35.543 回答
0

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

于 2009-10-16T08:44:57.140 回答