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 |
SELECT ename,
(CASE WHEN EXISTS (SELECT 1 FROM m_sys.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 with SQL, please help me?
Expected Output for the sql:
| 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;