Необходимо получить истину / ложь для каждой строки, которая существует в таблице

Необходимо получить истинное / ложное значение для каждой строки, существующей в таблице.

Мой точный вопрос, как мы можем использовать EXISTS с предложением IN.

Например: выберите существует (выберите 1 из table_name, где table_column в ('xyz', 'abc')).

Это возвращает ИСТИНА, даже если одна из строк существует. Мне нужен столбец, в котором указано ИСТИНА, если строка существует, и ЛОЖЬ, если нет. Только статус значений, указанных в операторе IN.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

существуют

FALSE // xyz не существует в таблице

ИСТИНА // abc существует в таблице


person Shiva Sagar    schedule 13.03.2018    source источник


Ответы (3)


Это должно работать, вернет один результат, ИСТИНА или ЛОЖЬ.

SELECT IF(COUNT(*)>0,TRUE,FALSE) as `Exists`
 FROM table_name
WHERE table_column in ('xyz','abc')
;
person Napoli    schedule 13.03.2018

Вы можете попробовать использовать выражение CASE:

SELECT
    'xyz' AS item,
    CASE WHEN EXISTS(SELECT 1 FROM table_name WHERE table_column = 'xyz')
         THEN 'true' ELSE 'false' END AS `exists`
FROM dual
UNION ALL
SELECT
    'abc',
    CASE WHEN EXISTS(SELECT 1 FROM table_name WHERE table_column = 'abc')
         THEN 'true' ELSE 'false' END
FROM dual;
person Tim Biegeleisen    schedule 13.03.2018
comment
Но это дает полное количество строк, мне нужно иметь логический столбец, состоящий из состояния тех двух строк, которые мы использовали в предложении IN, а также, даже если мы удалим *, он все равно даст логический столбец, но для всех строк в таблице. Кстати, спасибо за ответ, это помогает мне сейчас работать над CASE. Спасибо. - person Shiva Sagar; 13.03.2018
comment
@ShivaSagar Отредактируйте свой вопрос и покажите ваш точный ожидаемый результат. Не описывайте это в тексте. - person Tim Biegeleisen; 13.03.2018
comment
Готово. @ TimBiegeleisen - person Shiva Sagar; 13.03.2018
comment
Попробуйте мой обновленный запрос; просто поместите текущее предложение EXISTS в выражение CASE. - person Tim Biegeleisen; 13.03.2018
comment
Он дает одно ИСТИНА, если существует одно из двух значений, и одно ЛОЖЬ, если ни одно из них не существует в таблице. - person Shiva Sagar; 13.03.2018
comment
@ShivaSagar Я снова обновился. Не уверен, что тебе здесь действительно нужно. - person Tim Biegeleisen; 13.03.2018

Вы можете составить выбор из элементов, которые вы хотите вывести ('abc' и 'xyz'), используя DUAL и UNION. На этом этапе вы можете выполнить левое внешнее соединение между вашим предыдущим выбором и фактической таблицей. Если в таблице отсутствует один элемент, атрибут t.table_column будет иметь значение NULL (из-за внешнего соединения) в вашем наборе результатов. Затем вы можете проверить значение с помощью выражения case, чтобы получить ответ для каждого элемента.

Ваш запрос, вероятно, будет выглядеть так:

SELECT DISTINCT a.table_column,
                CASE WHEN t.table_column IS NULL
                     THEN 'FALSE'
                     ELSE 'TRUE' END
                AS exist_column
  FROM (SELECT 'xyz' AS table_column FROM DUAL
        UNION
        SELECT 'abc' FROM DUAL) a
  LEFT OUTER JOIN table_name t
    ON t.table_column = a.table_column
person Alex Zen    schedule 13.03.2018