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

发布于 2024-08-08 03:57:53 字数 418 浏览 6 评论 0原文

为什么不起作用?

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)

Why doesn't it work?

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

I get "ORA-00900: invalid SQL statement".
Is there a way to use WHERE clause inside the subquery?

Edit: Version 9.2

SELECT *
FROM v$version

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

The following executes just fine:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

超可爱的懒熊 2024-08-15 03:57:53

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

It works for me on 9.2 (32 bit version is the only difference):

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
赤濁 2024-08-15 03:57:53

您使用什么版本?

完全相同的 SQL 对我来说效果很好(Oracle Database 10g Express Edition Release 10.2.0.1.0)。

What version are you using?

The exact same SQL works fine for me (Oracle Database 10g Express Edition Release 10.2.0.1.0).

如果没有 2024-08-15 03:57:53

9i 以下的 Oracle 不支持 ANSI 连接语法。

如果您使用的是 8i 及更低版本,请使用此选项:

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

Oracle below 9i does not support ANSI join syntax.

Use this if you're on 8i and below:

SELECT  a.*
FROM    dual a,
        (
        SELECT  *
        FROM    dual
        WHERE   1 = 1
        ) b
WHERE   1 = 1
尛丟丟 2024-08-15 03:57:53

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

It looks correct to me and I am able to execute it in 10g, but it fails with 8i, which version of Oracle are you using?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文