Oracle внешние соединения - PullRequest
1 голос
/ 09 апреля 2019

возвращаются две записи при запуске из таблицы a.

select * from где a.id = '123'

Затем я создал временную таблицу t6, обратите внимание: естьв этой временной таблице нет записей для a.id 123.Я сделал левое соединение для таблицы a и t6 с предложением where a.id 123 и ожидаю, что 2 записи, которые будут возвращены со значениями из таблицы t6, будут нулевыми или пустыми.Но это не вернуло никаких строк.Я хотел бы знать, как исправить, чтобы заставить его работать.

select a.*, t6.*
from 
(select t5.column1, t5.column2, t1.column3, t1.column9, t2.column9, t3.column9, t4.column9
from            (select column3, column8, column9 from t7
                where upper(column8) = upper('abcd')
                )  t1
                join (select column3, column8, column9 from t7               
                where upper(column8) = upper('efgh')
                ) t2
                on t2.column3 = t1.column3
                and t1.column3 in (select id2 from a where a.id = '123')
                left outer join
                (select column3, column8, column9 from t7
                where upper(column8) = upper('ijkl')
                ) t3
                on t3.column3 = t1.column3    
                left outer join
               (select column3, column8, column9 from t7
                where upper(column8) = upper('mnop')
                ) t4
                on t4.column3 = t1.column3
                join t5  
                on t1.column9 =  t5.column10
) t6
left join
a
on a.id2 = t6.column3
where a.id = '123'

Ответы [ 3 ]

0 голосов
/ 09 апреля 2019

Если я понимаю, что главная таблица - это a, то вы должны написать таблицу a на первой позиции следующим образом:

select a.*, t6.*
from a left join
(select t5.column1, t5.column2, t1.column3, t1.column9, t2.column9, t3.column9, t4.column9
from            (select column3, column8, column9 from t7
                where upper(column8) = upper('abcd')
                )  t1
                join (select column3, column8, column9 from t7               
                where upper(column8) = upper('efgh')
                ) t2
                on t2.column3 = t1.column3
                and t1.column3 in (select id2 from a where a.id = '123')
                left outer join
                (select column3, column8, column9 from t7
                where upper(column8) = upper('ijkl')
                ) t3
                on t3.column3 = t1.column3    
                left outer join
               (select column3, column8, column9 from t7
                where upper(column8) = upper('mnop')
                ) t4
                on t4.column3 = t1.column3
                join t5  
                on t1.column9 =  t5.column10
) t6
on a.id2 = t6.column3
where a.id = '123'
0 голосов
/ 09 апреля 2019

Таблица A должна быть на левой стороне, а # t6 должна быть на правой стороне.

from a 
left join #t6 on on a.id2 = t6.column3

Запрос

select a.*, t6.*
from a
left join
(select t5.column1, t5.column2, t1.column3, t1.column9, t2.column9, t3.column9, t4.column9
from            (select column3, column8, column9 from t7
                where upper(column8) = upper('abcd')
                )  t1
                join (select column3, column8, column9 from t7               
                where upper(column8) = upper('efgh')
                ) t2
                on t2.column3 = t1.column3
                and t1.column3 in (select id2 from a where a.id = '123')
                left outer join
                (select column3, column8, column9 from t7
                where upper(column8) = upper('ijkl')
                ) t3
                on t3.column3 = t1.column3    
                left outer join
               (select column3, column8, column9 from t7
                where upper(column8) = upper('mnop')
                ) t4
                on t4.column3 = t1.column3
                join t5  
                on t1.column9 =  t5.column10
) t6

on a.id2 = t6.column3
where a.id = '123'
0 голосов
/ 09 апреля 2019

Измените LEFT JOIN на RIGHT JOIN.

Или измените направление цепи JOIN:

SELECT a.*, t6.*
FROM a LEFT JOIN ( SELECT ..... ) ON a.id2 = t6.column3
WHERE a.id = '123'
...