Search code examples
sqloracleoracle-sqldeveloperddlplsqldeveloper

CASE WHEN EXISTS in WHERE clause


I want to print all employee names and also if the employee is present in a table.

EMP_ID ENAME
1 ALLEN
2 MAX
3 BEN
EMP_ID EC_CODE
1 CONFIG_1
2 CONFIG_2
3 CONFIG_1

Query:

SELECT 
    ename, 
    (CASE 
         WHEN EXISTS (SELECT 1 FROM m_emp_config ec 
                      WHERE ec_code = 'CONFIG_1' AND emp_id = emp.emp_id) 
             THEN 'Y' 
             ELSE 'N' 
     END) config
FROM 
    emp emp

Can we write the CASE WHEN EXISTS in the WHERE clause instead of there?

I am new to SQL, please help me.

Expected output for the SQL statement:

ENAME CONFIG
ALLEN Y
MAX N
BEN Y

Solution

  • Your current query is correct for doing this via exists. Here is an alternative version using a left join:

    SELECT DISTINCT
        e.ENAME,
        CASE WHEN ec.EMP_ID IS NOT NULL THEN 'Y' ELSE 'N' END AS CONFIG
    FROM emp e
    LEFT JOIN m_sys.m_emp_config ec
        ON ec.EMP_ID = e.EMP_ID AND
           ec.ec_code = 'CONFIG_1'
    ORDER BY e.EMP_ID;