Dette er din forespørgsel:
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
En underforespørgsel i select
brugt på denne måde kaldes en skalær underforespørgsel . En sådan underforespørgsel kan bruges, hvor en skalær værdi (dvs. en enkelt værdi såsom et tal eller en streng) kan bruges.
Skalære underforespørgsler skal opfylde to betingelser:
- Den returnerer højst én række.
- Det returnerer én kolonne.
Løsningen i dit tilfælde er enkel ved at bruge en LEFT JOIN
:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
Eller i Oracle 12C kan du bruge en lateral joinforbindelse:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
De to ser ens ud i dette tilfælde, men en lateral joinforbindelse kan også bruges til en korreleret underforespørgsel.