SQL - Как выбрать несоответствующие параметры из предложения WHERE IN в результате запроса - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть две таблицы, например, TabA и TabB, что я хочу,

SELECT A.PERSONS,
 CASE WHEN A.PERSONS IS NOT NULL THEN 'AVAILABLE' ELSE 'NOT AVAILABLE' END AS PERSON_STATS,
 B.HOBBY
FROM TabA A INNER JOIN TabB B ON A.PersonID = B.PersonID
WHERE A.PERSONS IN ('ABC', 'DEF', 'GHI', 'JKL', 'MNOP', 'QRS', 'TUV', 'WQYZ')

Я получаю результат запроса выше, как показано ниже -

Result I'm getting

Если в TabA присутствует лицо «AB C», «DEF», то оно получит свою запись, но я хочу, чтобы лица, которые не соответствуют имени пользователя, отображали «Не доступно» и наоборот как List, предоставленный пользователем в качестве параметра в предложении WHERE.

Я хочу получить результат, как показано ниже -

Result I wanted

Как пользователь список будет иметь n Число пользовательских параметров, Я нашел это , но возможно ли это с тысячами записей в WHERE IN (Параметры) .

Пожалуйста, помогите мне достичь эта функциональность.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Используйте WITH Предложение для определения временной таблицы, а затем примените LEFT JOIN к этой таблице.

Вот мое решение -

    WITH TAB_PERSONS AS
    (
    SELECT 'ABC' AS PERSONS FROM DUAL UNION ALL
    SELECT 'DEF' AS PERSONS FROM DUAL UNION ALL
    SELECT 'GHI' AS PERSONS FROM DUAL UNION ALL
    SELECT 'JKL' AS PERSONS FROM DUAL UNION ALL
    SELECT 'MNOP' AS PERSONS FROM DUAL UNION ALL
    SELECT 'QRS' AS PERSONS FROM DUAL UNION ALL
    SELECT 'TUV' AS PERSONS FROM DUAL UNION ALL
    SELECT 'WQYZ' AS PERSONS FROM DUAL
    )
    SELECT P.TAB_PERSONS, 
      CASE WHEN A.PERSONS IS NOT NULL THEN 'AVAILABLE' ELSE 'NOT AVAILABLE' END AS PERSON_STATS, 
      B.HOBBY
    FROM TAB_PERSONS P LEFT JOIN TabA A ON A.PERSONS = P.PERSONS
    LEFT JOIN TabB B ON A.PersonID = B.PersonID
1 голос
/ 26 апреля 2020

Используйте LEFT JOIN - после составления списка желаемых имен:

SELECT p.PERSONS,
       (CASE WHEN A.PERSONS IS NOT NULL THEN 'AVAILABLE' ELSE 'NOT AVAILABLE' END) AS PERSON_STATS,
       B.HOBBY
FROM (SELECT 'ABC' as Persons FROM dual UNION ALL
      SELECT 'DEF' as Persons FROM dual UNION ALL
      . . .
     ) p LEFT JOIN
     TabA A
     ON A.persons = p.persons LEFT JOIN 
     TabB B 
     ON A.PersonID = B.PersonID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...