Adventure Time - Finn 3
본문 바로가기
Exception

SQL - ORA-01427: single-row subquery returns more than one row

by hyun9_9 2024. 1. 17.

SELECT CASE 
        WHEN EXISTS (SELECT 1 FROM SAVE WHERE LOGIN_ID='user') 
        THEN (SELECT SID FROM SAVE WHERE LOGIN_ID='user')
        ELSE 0
    END AS SAVE_RESULT,
Q.QID,Q.TITLE,C.CATEGORY
FROM QUESTIONS Q
JOIN 
    CATEGORY C ON Q.CATEGORY = C.CGID
WHERE 
    Q_ACCESS='T'

ORA-01427: single-row subquery returns more than one row

 

ORA-01427 오류는 단일 행 하위쿼리가 여러 개의 행을 반환하는 경우 발생합니다. 주어진 SQL 문에서도 해당 오류가 발생한 이유는 SELECT SID FROM SAVE WHERE LOGIN_ID='user' 서브쿼리가 여러 개의 행을 반환하기 때문입니다.

 

SELECT 
    CASE 
        WHEN S.SID IS NOT NULL
        THEN S.SID
        ELSE 0
    END AS SAVE_RESULT,
    Q.QID, Q.TITLE, C.CATEGORY
FROM 
    QUESTIONS Q
JOIN 
    CATEGORY C ON Q.CATEGORY = C.CGID
LEFT JOIN 
    SAVE S ON S.LOGIN_ID = 'user'
WHERE 
    Q.Q_ACCESS = 'T';

위의 SQL 문에서는 SAVE 테이블을 QUESTIONS 테이블과 LEFT JOIN하여 'user'에 해당하는 LOGIN_ID의 SID 값을 가져옵니다. 그리고 CASE 문을 사용하여 SID 값이 NULL인 경우에는 0을 반환하도록 합니다.