2014-11-20 4 views
0

Я работаю над внутренним запросом соединения sql, который должен возвращать MAX-элементы из других таблиц. Таблицы B, C, D, E могут быть пустыми. В этом случае нуль также следует печатать на выходе.Oracle Inner присоединяется к нескольким таблицам, возвращающим нулевые значения

Это то, что я пробовал.

SELECT A.INDEX, A.CODE, MAX(B.DAY), MAX(C.TIMESTAMP), MAX(D.TIMESTAMP) 
FROM A 
INNER JOIN B 
INNER JOIN C 
INNER JOIN D 
INNER JOIN E 
ON A.INDEX = B.INDEX 
ON A.INDEX = C.INDEX 
ON A.INDEX = D.INDEX 
ON A.INDEX = E.INDEX AND E.FUNCTION = 0; 

определение Таблицы:

A 
------- 
INDEX NOT NULL NUMBER(10) 
CODE NOT NULL VARCHAR2(16) 

B 
-------- 
INDEX NUMBER(10) 
DAY NUMBER(10) 

C 
--------- 
INDEX NUMBER(10) 
TIMESTAMP TIMESTAMP(6) 

D 
--------- 
INDEX NUMBER(10) 
TIMESTAMP TIMESTAMP(6) 

E 
---------- 
INDEX NUMBER(10) 
FUNCTION NUMBER(5) 

ответ

4

В этом случае рассмотрит проделывает LEFT OUTER JOIN вместо как

FROM A 
LEFT JOIN B 

Так что для вашего случая

SELECT A.INDEX, A.CODE, MAX(B.DAY), MAX(C.TIMESTAMP), MAX(D.TIMESTAMP) 
FROM A 
LEFT JOIN B ON A.INDEX = B.INDEX 
LEFT JOIN C ON A.INDEX = C.INDEX 
LEFT JOIN D ON A.INDEX = D.INDEX 
LEFT JOIN E ON A.INDEX = E.INDEX 
AND E.FUNCTION = 0; 
+0

Спасибо, это сработало. Я ищу только соответствующие элементы из таблицы E. Мне все равно, B, C, D. Если записи присутствуют в B, C, D MAX() записи должны быть возвращены в противном случае null. Я изменил запрос, как показано ниже. Он тоже работал. ВЫБОР A.INDEX, A.CODE, MAX (B.DAY), MAX (C.TIMESTAMP), MAX (D.TIMESTAMP) ИЗ LEFT JOIN B ON A.INDEX = B.INDEX LEFT JOIN C ON A.INDEX = C.INDEX LEFT JOIN D ON A.INDEX = D.INDEX INNER JOIN E ON A.INDEX = E.INDEX AND E.FUNCTION = 0; – user1

Смежные вопросы