Oracle
 sql >> Database >  >> RDS >> Oracle

Errore (la sottoquery a riga singola restituisce più di una riga)

Questa è la tua domanda:

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

Una sottoquery in select usato in questo modo è chiamato sottoquery scalare . Tale sottoquery può essere utilizzata dove può essere utilizzato un valore scalare (cioè un valore singolo come un numero o una stringa).

Le sottoquery scalari devono soddisfare due condizioni:

  • Restituisce al massimo una riga.
  • Restituisce una colonna.

La soluzione nel tuo caso è semplice, utilizzando un LEFT JOIN :

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

Oppure, in Oracle 12C, puoi utilizzare un join laterale:

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

I due hanno lo stesso aspetto in questo caso, ma un join laterale può essere utilizzato anche per una sottoquery correlata.