sql >> Databáze >  >> RDS >> Oracle

Chyba (jednořádkový poddotaz vrací více než jeden řádek)

Toto je váš dotaz:

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

Dílčí dotaz v select takto použitý se nazývá skalární dílčí dotaz . Takový dílčí dotaz lze použít tam, kde lze použít skalární hodnotu (tj. jednu hodnotu, jako je číslo nebo řetězec).

Skalární poddotazy musí splňovat dvě podmínky:

  • Vrátí maximálně jeden řádek.
  • Vrátí jeden sloupec.

Řešení ve vašem případě je jednoduché, pomocí LEFT JOIN :

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

Nebo v Oracle 12C můžete použít boční spojení:

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

Oba vypadají v tomto případě stejně, ale pro korelovaný dílčí dotaz lze také použít boční spojení.




  1. Jaký je rozdíl mezi mysql.createConnection a mysql.createPool v modulu MySQL Node.js?

  2. Opencart 2.2.0 umožňuje vyhledávání podle výrobce

  3. Oracle rychlejší stránkovací dotaz

  4. Vrácení všech řádků s určitými podmínkami