2016-04-11 2 views
0
select 'A' as ctable, a.coll1, a.coll2, a.coll3 from TABLE_A a 
union all 
select 'B' as ctable, b.coll1, b.coll2, b.coll3 from TABLE_B b 

Выход:Могу ли я сделать объединение, используя ключевое слово JOIN?

CTABLE COLL1 COLL2 COLL3 
A  01  abc  bac 
A  02  das  asd 
A  03  eas  sae 
B  01  bad  dab 
B  04  bmn  nmb 
B  05  cas  sac 

Здесь я хочу же вывод, используя JOIN. Coll1 является основным ключом для обеих таблиц. Таблица может быть пустой или данные могут быть одинаковыми, но вывод будет всех строк из обеих таблиц.

+4

Почему 'JOIN'? Кажется, это идеальный случай для 'UNION ALL'. –

+0

Я хочу пропустить избыточность SQL –

+0

Что вы имеете в виду под «избыточным»? чтобы получить тот же результат с JOIN, вам понадобится больше кода, чем UNION ALL, а не меньше, и полученный код будет менее эффективным, менее читаемым, ... – Aleksej

ответ

0

Это не может дать такую ​​же производительность, как UNION, но я думаю, что это то, что вы ищете

Вам нужно создать представление:

create view mutex as 
select i 
from (select 0 
union 
select 1)sq (i) 

Теперь вы можете использовать этот вид, чтобы получить ваши желаемые результаты как:

select coalesce(a.A,b.B),coalesce(a.coll1,b.coll1),coalesce(a.coll2,b.coll2),coalesce(a.coll3,b.coll3) 
from mutex 
left join TABLE_A as a on i =0 
left join TABLE_B as b on i =1 

Примечание: Вместо зрения мьютекса, вы можете также использовать таблицу, которая будет иметь эти 2 строки

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