简体   繁体   English

ORA-01427单行子查询返回的行多

[英]ORA-01427 single-row subquery returns more that one row

I have run into a problem with Oracle SQL the Error is: ORA-01427 single-row subquery returns more that one row I am trying to find the locations that have at least one vehicle with manual 我遇到了Oracle SQL的问题,错误是: ORA-01427单行子查询返回的行数多于我正在尝试查找具有至少一部手动车辆的位置
transmission that has lower mileage than any luxury vehicle at that location. 变速箱的行驶里程低于该位置的任何豪华车。

Here is My Table 这是我的桌子

VID          MILEAGE         LOCATION        VSIZE        TRANSMISSION
----------------------------------------------------------------------
V-101       70               AHMD            COMPACT      AUTOMATIC
V-102       50               SURAT           COMPACT      AUTOMATIC
V-103       10               AHMD            MID-SIZE     MANUAL
V-104       30               AHMD            MID-SIZE     AUTOMATIC
V-105       15               VADODARA        FULL-SIZE    AUTOMATIC
V-106       20               AHMD            LUXURY       AUTOMATIC
V-107       50               AHMD            LUXURY       MANUAL

And this is my Query: 这是我的查询:

SELECT location, transmission, mileage FROM vehicles_workshop 
  WHERE transmission = 'MANUAL' AND mileage = 
      ( SELECT DISTINCT mileage FROM vehicles_workshop WHERE mileage < 
          (SELECT MAX(mileage) FROM vehicles_workshop WHERE vsize = 'LUXURY')
      );

Instead of equal to operator use IN before subquery 在子查询之前使用IN代替等于运算符

SELECT location, transmission, mileage FROM vehicles_workshop 
  WHERE transmission = 'MANUAL' AND mileage IN
      ( SELECT DISTINCT mileage FROM vehicles_workshop WHERE mileage < 
          (SELECT MAX(mileage) FROM vehicles_workshop WHERE vsize = 'LUXURY')
      );

Your subquery for comparing mileage is returning more than one value but equal to operator can work to compare only single values and so error is thrown. 您的用于比较里程的子查询返回多个值,但等于运算符只能比较单个值,因此会引发错误。

SELECT location, transmission, mileage 
FROM vehicles_workshop t1
WHERE transmission = 'MANUAL'         --manual transmission
  AND EXISTS
      ( SELECT *
        FROM vehicles_workshop t2 
        WHERE vsize = 'LUXURY'        --luxury vehicle
        AND t2.location = t1.location --same location
        AND t2.mileage  > t1.mileage) --higher mileage
      ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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