sql >> Database >  >> RDS >> Oracle

Fout (subquery met één rij retourneert meer dan één rij)

Dit is uw vraag:

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

Een subquery in de select op deze manier gebruikt, wordt een scalaire subquery genoemd . Een dergelijke subquery kan worden gebruikt waar een scalaire waarde (d.w.z. een enkele waarde zoals een getal of tekenreeks) kan worden gebruikt.

Scalaire subquery's moeten aan twee voorwaarden voldoen:

  • Het geeft maximaal één rij terug.
  • Het geeft één kolom terug.

De oplossing in jouw geval is eenvoudig, met behulp van een LEFT JOIN :

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

Of u kunt in Oracle 12C een laterale join gebruiken:

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

De twee zien er in dit geval hetzelfde uit, maar een laterale join kan ook worden gebruikt voor een gecorreleerde subquery.




  1. Records verwijderen uit een externe postgresql-database met behulp van een lokaal geleverde lijst

  2. Hoe deze MySQL-tabel verder te optimaliseren voor een enkele query

  3. Fout bij ophalen van tabel bestaat niet, maar de tabel bestaat wel (ActiveRecord::StatementInvalid Mysql2::Error:Table bestaat niet)

  4. Vertragen ongebruikte mysql-verbindingen scripts?