Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro (subconsulta de linha única retorna mais de uma linha)


Esta é a sua consulta:
select en.*,
       (select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;

Uma subconsulta no select usado assim é chamado de subconsulta escalar . Essa subconsulta pode ser usada onde um valor escalar (ou seja, um valor único, como um número ou string) pode ser usado.

As subconsultas escalares devem atender a duas condições:
  • Ele retorna no máximo uma linha.
  • Ele retorna uma coluna.

A solução no seu caso é simples, usando um LEFT JOIN :
select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join
     data2 sf
     on 1=1;

Ou, no Oracle 12C, você pode usar uma junção lateral:
select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join lateral
     data2 sf
     on 1=1;

As duas parecem iguais neste caso, mas uma junção lateral também pode ser usada para uma subconsulta correlacionada.