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

Fejl (enkelt række underforespørgsel returnerer mere end én række)

Dette er din forespørgsel:

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

En underforespørgsel i select brugt på denne måde kaldes en skalær underforespørgsel . En sådan underforespørgsel kan bruges, hvor en skalær værdi (dvs. en enkelt værdi såsom et tal eller en streng) kan bruges.

Skalære underforespørgsler skal opfylde to betingelser:

  • Den returnerer højst én række.
  • Det returnerer én kolonne.

Løsningen i dit tilfælde er enkel ved at bruge en LEFT JOIN :

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

Eller i Oracle 12C kan du bruge en lateral joinforbindelse:

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

De to ser ens ud i dette tilfælde, men en lateral joinforbindelse kan også bruges til en korreleret underforespørgsel.




  1. PHP-formular indsættes ikke i mySQL-databasen

  2. PLS-00103:Stødte på symbolet CREATE

  3. SQL-ydeevne søger efter lange strenge

  4. Kaskade Slet forespørgsel