MySql результаты, которые не были найдены, как получить результат без совпадения?

Я выполняю запрос, как это:

select x from table where c in ('variable','test','ok')

Я получаю результаты для всех соответствующих C. (переменная и тест) Но, так как в c не существует ok, я ничего не получаю. Даже не ноль или 0 результат.

Как я могу сказать mysql, что я хочу получить результат, даже если он не находит соответствия для термина в условии in?

пример:

result 
x = 12
x = 25
x = NOT FOUND

заранее спасибо

2 ответа

Я не уверен, что я понимаю проблему, но я предполагаю, что вы имеете в виду, что вы хотите значение X столбца, если c in ('variable','test','ok')и если нет, то вы хотите 'NOT FOUND'? Переместить IN состояние из WHERE пункт к select список:

select case when c in ('variable','test','ok') then x
       else 'NOT FOUND' end
from table

Или, возможно, вы имеете в виду, что если вообще не было возвращено ни одной строки, вы хотите одну 'NOT FOUND' строка? Делать UNION ALL с этим рядом.

select x from table where c in ('variable','test','ok')
UNION ALL
select 'NOT FOUND'
from (select count(*) as cnt from table
       where c in ('variable','test','ok') t
where cnt = 0

Обычный подход для этого - внешнее соединение, которое объединяет подзапрос для ваших фиксированных данных и вашей фактической таблицы:

select v1.name, coalesce(t.x, 'NOT FOUND')
from (
  select 'variable' as name union all
  select 'test' union all
  select 'x') v1
left join t on t.c = v1.name

SQL Fiddle

Другие вопросы по тегам