Mając dwie tabele (tabela.1, tabl. 2) z takimi samymi nazwami kolumn (pokolenie, rodzic), pożądanym rezultatem będzie połączenie wszystkich kolumnach obu tabel. W ten sposób, wiersze tabeli 2 należy dołączyć do tabeli 1, aby wiersza tabeli 2 zgodne z wierszy tabeli 1 w kolumnie generacji. Nadrzędny numer musi być posortowana rosnąco dla rekordów w tabeli 1 oraz w tabeli 2. Liczba wierszy wyników zapytania musi być równa liczbie wierszy w tabeli 1.
Przedstawiono następujące tabele
tabela 1:
| generation | parent |
|:----------:|:------:|
| 0 | 1 |
| 0 | 2 |
| 0 | 3 |
| 1 | 3 |
| 1 | 2 |
| 1 | 1 |
| 2 | 2 |
| 2 | 1 |
| 2 | 3 |
tabela 2:
| generation | parent |
|:----------:|:------:|
| 1 | 3 |
| 1 | 1 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
Następujące wnioski są przeznaczone do tworzenia i wypełniania dwóch przykładowych tabel, jak pokazano powyżej:
create table table1(generation integer, parent integer);
insert into table1 (generation, parent) values(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(2,2),(2,1),(2,3);
create table table2(generation integer, parent integer);
insert into table2 (generation, parent) values(1,3),(1,1),(1,3),(2,1),(2,2),(2,3);
wyimaginowany wniosek musi prowadzić do następnego pożądanego wyniku:
| table1_generation | table1_parent | table2_generation | table2_parent |
|:-----------------:|:-------------:|:-----------------:|:-------------:|
| 0 | 1 | | |
| 0 | 2 | | |
| 0 | 3 | | |
| 1 | 1 | 1 | 1 |
| 1 | 2 | 1 | 3 |
| 1 | 3 | 1 | 3 |
| 2 | 1 | 2 | 1 |
| 2 | 2 | 2 | 2 |
| 2 | 3 | 2 | 3 |
Aktualny zapytanie wygląda następująco:
with
p as (
select
generation,
parent
from
table1
order by
generation,
parent
), o as(
select
generation,
parent
from
table2
order by
generation,
parent
)
select
p.generation as table1_generation,
p.parent as table1_parent,
o.generation as table2_generation,
o.parent as table2_parent
from
p
left join o on
o.generation=p.generation;
Co prowadzi do następującego wyniku:
| table1_generation | table1_parent | table2_generation | table2_parent |
|:-----------------:|:-------------:|:-----------------:|:-------------:|
| 0 | 1 | | |
| 0 | 2 | | |
| 0 | 3 | | |
| 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 3 |
| 1 | 1 | 1 | 3 |
| 1 | 2 | 1 | 1 |
| 1 | 2 | 1 | 3 |
| 1 | 2 | 1 | 3 |
| 1 | 3 | 1 | 1 |
| 1 | 3 | 1 | 3 |
| 1 | 3 | 1 | 3 |
| 2 | 1 | 2 | 1 |
| 2 | 1 | 2 | 2 |
| 2 | 1 | 2 | 3 |
| 2 | 2 | 2 | 1 |
| 2 | 2 | 2 | 2 |
| 2 | 2 | 2 | 3 |
| 2 | 3 | 2 | 1 |
| 2 | 3 | 2 | 2 |
| 2 | 3 | 2 | 3 |
Ten link doprowadziła do wniosku, że każda drużyna join może okazać się nie tym, że tutaj trzeba ... Ale łączenie tylko dodaje wiersze... więc dla mnie absolutnie niezrozumiałe, jak można osiągnąć pożądany rezultat o. o.
Każda pomoc będzie doceniona. Z góry dziękuję!