Где условия в подборе при использовании ANSI соединяется

StackOverflow https://stackoverflow.com/questions/1576820

  •  21-09-2019
  •  | 
  •  

Вопрос

Почему это не работает?

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

Я получаю "ORA-00900: недействительный заявление SQL". Есть ли способ использовать, где пункт внутри подзадна?

РЕДАКТИРОВАТЬ: Версия 9.2

SELECT *
FROM v$version

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64 -битное производство

Следующее выполняется просто отлично:

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual /*WHERE 1=1*/) b
     ON (1=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

Другие советы

Какую версию ты используешь?

Тот же самый SQL работает нормально для меня (Oracle Database 10G Express Edition Release 10.2.0.1.0).

Oracle ниже 9i не поддерживается ANSI Присоединяйтесь к синтаксису.

Используйте это, если вы находитесь 8i и ниже:

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

Это выглядит правильно для меня, и я могу выполнить его в 10G, но он не работает с 8i, какую версию Oracle вы используете?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top