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.