Voici votre requête :
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
Une sous-requête dans le select
utilisé comme ceci s'appelle une sous-requête scalaire . Une telle sous-requête peut être utilisée lorsqu'une valeur scalaire (c'est-à-dire une valeur unique telle qu'un nombre ou une chaîne) peut être utilisée.
Les sous-requêtes scalaires doivent remplir deux conditions :
- Il renvoie au plus une ligne.
- Il renvoie une colonne.
La solution dans votre cas est simple, en utilisant un LEFT JOIN
:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
Ou, dans Oracle 12C, vous pouvez utiliser une jointure latérale :
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
Les deux se ressemblent dans ce cas, mais une jointure latérale peut également être utilisée pour une sous-requête corrélée.