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 |
CodePudding user response:
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;
CodePudding user response:
You can also use DECODE
instead of a CASE WHEN
construct.
SELECT
e.ename,
DECODE(ec.ec_code,NULL, 'N','Y') AS config
FROM emp e
LEFT JOIN m_emp_config ec
ON ec.emp_id = e.emp_id AND
ec.ec_code = 'Config_1'
ORDER BY e.emp_id;