Мне нужно полностью объединить две таблицы с несколькими ключами
Например, у меня есть две таблицы, одна выглядит так:
id1 | foreignerkey | name | value
1 5 name1 1
2 6 name2 2
3 7 name4 3
как t01
;другой выглядит так:
id2 | foreignerkey | name | value
1 5 name1 1
2 7 name2 2
3 8 name2 3
как t02
.
Мне нужно "select t01.* , to2.* from t01 full join t02 on t01.name = t02.name
", но мне также нужно "select t01.* , t02.* from t01 join t02 where t01.foreignerkey = t02.foreignerkey
", результат, который мне нужен, такой:
id1 | foreignerkey | name | value | id2 | foreignerkey | name | value
1 5 name1 1 1 5 name1 1
2 6 name2 2 null null null null
3 7 name4 3 null null null null
null null null null 2 7 name2 2
null null null null 3 8 name2 3
Проблема в том, что, как вы можете видеть, я сначала поставил строку запроса примерно так: "select t01.* , t02.* from t01 full join t02 on t01.name = t02.name where
t01.foreignerkey = t02.foreignerkey
", но затем, когда t01.name = "name4"
(чего нет в t02
), он не будет отображаться в результатах.
Итак, моя последняя строка запроса:
select a.* from
(select t01.id1, t01.foreignerkey as foreignerkey1, t01.name, t01.value,
t02.id2, t02.foreignerkey as foreignerkey2, t02.name, t02.value
from t01
full join t02
on t01.name = t02.name) a
where a.foreignerkey1 = a.foreignerkey2
or a.foreignerkey1 is null
or a.foreignerkey2 is null
Получение результатов слишком дорого, есть ли лучшее решение?