Dit is uw vraag:
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
Een subquery in de select
op deze manier gebruikt, wordt een scalaire subquery genoemd . Een dergelijke subquery kan worden gebruikt waar een scalaire waarde (d.w.z. een enkele waarde zoals een getal of tekenreeks) kan worden gebruikt.
Scalaire subquery's moeten aan twee voorwaarden voldoen:
- Het geeft maximaal één rij terug.
- Het geeft één kolom terug.
De oplossing in jouw geval is eenvoudig, met behulp van een LEFT JOIN
:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
Of u kunt in Oracle 12C een laterale join gebruiken:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
De twee zien er in dit geval hetzelfde uit, maar een laterale join kan ook worden gebruikt voor een gecorreleerde subquery.