sql >> Base de Datos >  >> RDS >> Oracle

Error (la subconsulta de una sola fila devuelve más de una fila)

Esta es su consulta:

select en.*,
       (select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;

Una subconsulta en select usado así se llama una subconsulta escalar . Dicha subconsulta se puede usar donde se puede usar un valor escalar (es decir, un valor único como un número o una cadena).

Las subconsultas escalares deben cumplir dos condiciones:

  • Devuelve como máximo una fila.
  • Devuelve una columna.

La solución en su caso es simple, usando un LEFT JOIN :

select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join
     data2 sf
     on 1=1;

O, en Oracle 12C, puede usar una unión lateral:

select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join lateral
     data2 sf
     on 1=1;

Los dos tienen el mismo aspecto en este caso, pero también se puede usar una unión lateral para una subconsulta correlacionada.