Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Fehler (Einzeilige Unterabfrage gibt mehr als eine Zeile zurück)

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.