sql >> Databasteknik >  >> RDS >> Oracle

Fel (enrads underfråga returnerar mer än en rad)

Det här är din fråga:

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

En underfråga i select används på det här sättet kallas en skalär underfråga . En sådan underfråga kan användas där ett skalärt värde (dvs. ett enda värde som ett tal eller en sträng) kan användas.

Skalära underfrågor måste uppfylla två villkor:

  • Den returnerar högst en rad.
  • Den returnerar en kolumn.

Lösningen i ditt fall är enkel, med 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 använda en lateral sammanfogning:

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

De två ser likadana ut i det här fallet, men en lateral koppling kan också användas för en korrelerad underfråga.




  1. Hur gör man paginering med mybatis?

  2. Hur to_number()-funktionen fungerar i PostgreSQL

  3. Hur man anger ApplicationName i NpgSql-anslutningssträngen

  4. Avancerad MySQL alfabetisk sortering med prefix?