Questa è la tua domanda:
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
Una sottoquery in select
usato in questo modo è chiamato sottoquery scalare . Tale sottoquery può essere utilizzata dove può essere utilizzato un valore scalare (cioè un valore singolo come un numero o una stringa).
Le sottoquery scalari devono soddisfare due condizioni:
- Restituisce al massimo una riga.
- Restituisce una colonna.
La soluzione nel tuo caso è semplice, utilizzando un LEFT JOIN
:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
Oppure, in Oracle 12C, puoi utilizzare un join laterale:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
I due hanno lo stesso aspetto in questo caso, ma un join laterale può essere utilizzato anche per una sottoquery correlata.