Având două tabele (tabelul 1, tabelul 2) cu același nume de coloană (generație, părinte), rezultatul dorit va fi o combinație de toate coloanele din ambele tabele. Astfel, rândurile din tabelul 2 ar trebui să se alăture tabelul 1 , astfel încât rândurile din tabelul 2 se potrivesc cu cele din tabelul 1 pe generație coloana. Părintele număr ar trebui să fie ordonat crescător pentru înregistrările din tabelul 1 , precum și în tabelul 2. Numărul de rânduri de rezultate de interogare ar trebui să fie egale cu cele din tabelul 1.
Având în tabelele de mai jos
tabelul 1:
| generation | parent |
|:----------:|:------:|
| 0 | 1 |
| 0 | 2 |
| 0 | 3 |
| 1 | 3 |
| 1 | 2 |
| 1 | 1 |
| 2 | 2 |
| 2 | 1 |
| 2 | 3 |
tabelul 2:
| generation | parent |
|:----------:|:------:|
| 1 | 3 |
| 1 | 1 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
Următoarele întrebări sunt de gând pentru crearea și popularea două eșantioane tabelele prezentate mai sus:
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);
imaginat de interogare ar trebui să conducă la următoarele rezultatul dorit:
| 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 |
Interogarea curentă arată după cum urmează:
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;
Care conduce la următorul rezultat:
| 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 |
Acest link a condus la concluzia, că orice se alăture comanda nu s-ar putea ceea ce este necesar aici ... Dar uniunea nu doar adăugați rânduri... asa ca pentru mine este absolut clar, cum rezultatul dorit poate fi atins o.O
Orice ajutor este apreciat. Multumesc anticipat!