Где условия в подборе при использовании ANSI соединяется
Вопрос
Почему это не работает?
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 вы используете?
Не связан с StackOverflow