SQL-запрос для поиска по той же таблице, из которой выбираются записи - PullRequest
1 голос
/ 05 марта 2019

Пример записей:

Custid pref_location
C1     PUNE
C1     MUMBAI
c1     DELHI    
C2     PUNE
C2     MUMBAI
C3     MUMBAI  
c4     PUNE
C5     DELHI

Я хочу получить записи, в которых предпочтительным местоположением является только PUNE или MUMBAI. Я делаю это с помощью запроса ниже:

SELECT *
FROM EMP_PRE_LOCATION E1
WHERE EXISTS (SELECT 1 
        FROM EMP_PRE_LOCATION E2 
        WHERE E2.EID=E1.EID AND E2.PRE_LOCATION in ('PUNE','MUMBAI'))
AND NOT  EXISTS (SELECT 1 
        FROM EMP_PRE_LOCATION E3 
        WHERE E3.EID=E1.EID AND E3.PRE_LOCATION NOT in('PUNE','MUMBAI'));

Есть ли лучший способ добиться того же?

Ответы [ 3 ]

1 голос
/ 05 марта 2019

Я думаю, вы просто хотите:

SELECT E1.*
FROM EMP_PRE_LOCATION E1
WHERE NOT EXISTS (SELECT 1 
                  FROM EMP_PRE_LOCATION E2 
                  WHERE E2.EID = E1.EID AND
                        E2.PRE_LOCATION NOT IN ('PUNE', 'MUMBAI')
                 );

Если вы хотите, чтобы сотрудники работали только в этих двух местах, вы можете использовать GROUP BY и HAVING:

SELECT E1.EID
FROM EMP_PRE_LOCATION E1
GROUP BY E1.EID
HAVING SUM(CASE WHEN E1.PRE_LOCATION NOT IN ('PUNE', 'MUMBAI') THEN 1 ELSE 0 END) = 0;

Вы можете добавить LISTAGG(E1.PRE_LOCATION, ','), если хотите получить список мест.

1 голос
/ 05 марта 2019

Пожалуйста, попробуйте это.

SELECT *
FROM EMP_PRE_LOCATION
WHERE pref_location ='PUNE' OR pref_location ='MUMBAI'
0 голосов
/ 05 марта 2019

Второе WHERE предложение будет делать то, что вы хотите:

SELECT E1.*
FROM EMP_PRE_LOCATION E1
WHERE E1.PRE_LOCATION IN ('PUNE','MUMBAI') AND 
      NOT EXISTS (SELECT 1 
                  FROM EMP_PRE_LOCATION E3 
                  WHERE E3.EID = E1.EID AND E3.PRE_LOCATION NOT IN ('PUNE','MUMBAI')
                 );

Это вернуло бы только EID с, которые имеют только LOCATION IN ('PUNE','MUMBAI').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...