Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur (la sous-requête à ligne unique renvoie plusieurs lignes)

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.