简体   繁体   中英

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

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

ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"

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 (ie 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM