#sql #oracle #syntax #inner-join
#sql #Oracle #синтаксис #внутреннее объединение
Вопрос:
У меня сейчас нет доступа к базе данных Oracle, поэтому я публикую свой вопрос здесь:
Является ли следующее утверждение допустимым синтаксисом Oracle SQL?
SELECT a1
FROM t1 INNER JOIN t2
Мне особенно интересно, нужно ли нам указывать атрибут соединения для внутреннего соединения.
Лучше всего, будет
Комментарии:
1. или попробуйте естественное объединение, если имена объединяемых столбцов совпадают
2. Пожалуйста, избегайте
natural join
. Как говорит APC ниже, «это ошибка, ожидающая своего появления».
Ответ №1:
Вы упускаете ON
Нравится
SELECT a1
FROM t1 INNER JOIN t2
ON t1.SomeID = t2.SomeID
Ответ №2:
Итак, это запрос, о котором вы думаете….
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>
Как мы можем видеть, это завершается ошибкой. Синтаксис ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ требует, чтобы мы предоставляли столбцы для объединения…
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>
Существует альтернативный синтаксис, ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ. Этот синтаксис автоматически объединит две таблицы на основе всех столбцов с одинаковыми именами.
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>
Это изящный трюк, но на самом деле на него не следует полагаться в производственном коде; это ошибка, ожидающая своего появления.
Ответ №3:
Вам нужно будет добавить предложение ON
SELECT a1
FROM t1 INNER JOIN t2 on t1.a1=t2.a1
Ответ №4:
Да, вы должны указать условие соединения:
ИЗ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 в t1.f = t2.f