oracle 使用ANSI联接时子查询中的WHERE条件

uemypmqf  于 2023-03-22  发布在  Oracle
关注(0)|答案(4)|浏览(158)

为什么不管用?

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

Oracle 9 i Enterprise Edition 9.2.0.8.0 - 64位产品
下面的代码执行得很好:

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

ego6inou1#

它适用于我的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
cuxqih21

cuxqih212#

您使用的是什么版本?
完全相同的SQL对我来说工作得很好(Oracle数据库10g Express Edition 10.2.0.1.0版)。

x6h2sr28

x6h2sr283#

9i以下版本的Oracle不支持ANSI联接语法。
如果您使用8i及以下版本,请使用此选项:

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

zwghvu4y4#

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

相关问题