Error (single-row subquery returns more than one row)

后端 未结 1 1078
渐次进展
渐次进展 2021-01-28 01:00

What is wrong with this query?

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

I have error

相关标签:
1条回答
  • 2021-01-28 01:32

    This is your query:

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

    A subquery in the select used like this is called a scalar subquery. Such a subquery can be used where a scalar value (i.e. single value such as a number or string) can be used.

    Scalar subqueries must meet two conditions:

    • It returns at most one row.
    • It returns one column.

    The solution in your case is simple, using a LEFT JOIN:

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

    Or, in Oracle 12C, you can use a lateral join:

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

    The two look the same in this case, but a lateral join can also be used for a correlated subquery.

    0 讨论(0)
提交回复
热议问题