2013-06-21 5 views
1

У меня есть четыре таблицы, которые я хочу объединить и отобразить вывод вместе. Я не уверен, как синтаксис работает для Oracle SQL Developer. Я знаю, что это простой вопрос для программиста, и я надеялся, что кто-то может сделать предложение о том, как выглядит код.Присоединение таблиц в Oracle SQL Developer

В таблицы являются:

JNL1 
JNL2 
JNL3 
JNL4 

Ключ, который является общим между всеми четырьмя из этих таблиц ItemID.

Как будет выглядеть запрос? Спасибо

+1

Синтаксис не определяется инструментом (который является разработчиком SQL), а системой базы данных (которая является Oracle). Ознакомьтесь с руководством Oracle о том, как написать соединение: http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries006.htm#i2054012 –

ответ

4

Это действительно зависит от того, какое соединение вы хотите (внешний или нет), но вы можете использовать синтаксис SQL по умолчанию.

Например, присоединение без JOIN ключевого слова:

select * from JNL1, JNL2, JNL3, JNL4, 
where 
JNL1.ItemID = JNL2.ItemID AND 
JNL2.ItemID = JNL3.ItemID AND 
JNL3.ItemID = JNL4.ItemID; 

Кроме того, вы можете использовать несколько INNER JOINS например,

SELECT whatever 
    FROM JNL1 AS a 
INNER 
    JOIN JNL2 AS b 
    ON b.ItemID = a.ItemID 
INNER 
    JOIN JNL2 AS c 
    ON c.ItemID = b.ItemID 
INNER 
    JOIN JNL2 AS d 
    ON d.ItemID = c.ItemID 
+1

Спасибо, это работает отлично. –

0

Если вы хотите вывести строки из всех таблиц, и если столбцы будут одинаковыми в каждой таблице, то будет работать UNION ALL. Обратите внимание, что это не в том смысле, к базе данных, JOIN, хотя это своего рода в английском смысле:

SELECT * FROM JNL1 
UNION ALL SELECT * FROM JNL2 
UNION ALL SELECT * FROM JNL3 
UNION ALL SELECT * FROM JNL4 

Вы можете добавить ORDER BY в конце концов, если это необходимо.

UNION похож на UNION ALL, но он будет пропускать строки, где все значения являются дубликатами.

+0

Это дает мне эту ошибку, когда я запускаю ее: Все запросы объединенный с использованием оператора UNION, INTERSECT или EXCEPT, должен иметь равное количество выражений в своих целевых списках –

+0

ОК, это в основном означает, что я неправильно понял ваш вопрос. Я думал, что вы можете означать «присоединиться» в смысле «добавить» - я догадался, потому что не было определений таблиц, и я догадался, что неправильно :) Другие ответы используют фактические объединения баз данных, поэтому они, вероятно, вы хотите. –

2

Он работает в Oracle, как это было бы в других двигателях DB:

SELECT * 
FROM JNL1 j1 
INNER JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
INNER JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
INNER JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

Один типичный синтаксис Oracle существует, когда вы хотите LEFT JOIN:

Стандарт SQL:

SELECT * 
FROM JNL1 j1 
LEFT JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
LEFT JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
LEFT JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

эквивалентен синтаксису Oracle:

SELECT * 
FROM JNL1 j1, 
JNL2 j2, 
JNL3 j3, 
JNL4 j4, 
WHERE j1.ItemID=j2.ItemID(+) 
AND j1.ItemID=j3.ItemID(+) 
AND j1.ItemID=j4.ItemID(+)