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.