Dies ist Ihre Abfrage:
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
Eine Unterabfrage im select
so verwendet wird eine skalare Unterabfrage genannt . Eine solche Unterabfrage kann dort verwendet werden, wo ein Skalarwert (d. h. ein einzelner Wert wie eine Zahl oder ein String) verwendet werden kann.
Skalare Unterabfragen müssen zwei Bedingungen erfüllen:
- Es gibt höchstens eine Zeile zurück.
- Es gibt eine Spalte zurück.
Die Lösung in Ihrem Fall ist einfach, indem Sie einen LEFT JOIN
verwenden :
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
Oder Sie können in Oracle 12C einen lateralen Join verwenden:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
Die beiden sehen in diesem Fall gleich aus, aber ein Lateral Join kann auch für eine korrelierte Unterabfrage verwendet werden.