Синтаксис Oracle SQL: внутреннее соединение - PullRequest
1 голос
/ 11 мая 2011

Сейчас у меня нет доступа к базе данных Oracle, поэтому я публикую свой вопрос здесь:

Допустим ли следующий оператор синтаксис Oracle SQL?

SELECT a1
FROM t1 INNER JOIN t2

IМне особенно интересно, нужно ли нам указывать атрибут соединения для внутреннего соединения.

Best, Will

Ответы [ 4 ]

8 голосов
/ 11 мая 2011

Тебе не хватает ON

Как

SELECT a1
FROM t1 INNER JOIN t2
ON t1.SomeID = t2.SomeID
7 голосов
/ 11 мая 2011

Итак, это вопрос, о котором вы думаете ....

SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4  /
from emp e inner join dept d
                           *
ERROR at line 3:
ORA-00905: missing keyword


SQL>

Как мы видим, он терпит неудачу.Синтаксис INNER JOIN требует, чтобы мы предоставляли столбцы для объединения ...

SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4      on ( d.deptno = e.deptno )
  5  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>

Существует альтернативный синтаксис, NATURAL JOIN.Этот синтаксис автоматически объединит две таблицы на основе всех столбцов с одинаковыми именами.

SQL> select e.ename
  2         , d.dname
  3  from emp e natural join dept d
  4  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>

Это хитрый трюк, но в производственном коде на него не следует полагаться;это ошибка, ожидающая своего появления.

2 голосов
/ 11 мая 2011

Вам нужно будет добавить предложение ON

SELECT a1
FROM t1 INNER JOIN t2 on t1.a1=t2.a1
1 голос
/ 11 мая 2011

Да, вы должны указать условие соединения:

ОТ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 на t1.f = t2.f

...