2014-12-22 24 views
0

Я пытаюсь использовать условие if else в статье where.mysql, если значение существует в столбце else

Я пробовал следующий запрос.

Set @msg = 'Member not on file.'; 

SELECT q.Id, q.ParentId, q.RootId FROM queues q 
Where 
CASE When q.Name = @msg Then 1 
else q.Name = 'EDI' 
End; 

Здесь я хочу, чтобы проверить, если массаж существует в колонке, т.е. Name затем вернуть Id,ParentId, RootId еще вернуть Id,ParentId,RootId из Name = 'EDI'. Когда я запустил это, он возвращает оба результата. В приведенном выше коде @msg, то есть 'Member not on file.', уже находится в таблице. Если @msg не существует, то только Я хочу вернуть id's из EDI.

Как я могу улучшить запрос?

ответ

0

Я никогда не использовал CASE-заявления на сервере MySQL, только MS SQL Server. Я думаю, у вас нет правильного сравнения в предложении WHERE. В выписке выше вы всегда будете работать в случае, когда, так что ваше заявление исто

SELECT q.Id, q.ParentID, q.RootId FROM queues q 
WHERE 1 

как 1 всегда верно, так что вы получите результаты бот.

Возможно, это соответствует вашим потребностям?

SELECT q.Id, q.ParentId, q.RootId FROM queues q 
WHERE q.Name = CASE WHEN q.Name = @msg THEN @msg ELSE 'EDI' 

Таким образом, вы будете иметь [email protected] ИЛИ q.Name = 'ЭДО', depeding на значении q.Name.

+0

Он еще вернется как запись. Запись для соответствия 'Name', а также EDI –

+0

Да, вы правы. Сожалею. – Janna

+0

Не могли бы вы рассказать подробнее о проблеме? Если вы всегда хотите показывать только datarows с именем = '@msg', если @msg существует в таблице, ответ rcs должен совпадать. В противном случае было бы здорово узнать больше о том, что вы пытаетесь сделать, чтобы помочь вам. – Janna

0

Try:

SELECT CASE WHEN (SELECT COUNT(*) FROM queues q Where q.Name = @msg) > 0 THEN 
    SELECT q.Id, q.ParentId, q.RootId FROM queues q Where q.Name = @msg 
ELSE 
    SELECT q.Id, q.ParentId, q.RootId FROM queues q Where q.Name = 'EDI' 
+0

Это дает мне ошибку, если. –

+0

Я использую MySQL. –

+0

Можно попробовать обновленный ответ? – rcs

0

Вы можете использовать union и not exists достичь это что-то, как

select * from queues where Name = @msg 
union 
select * from queues 
where Name = 'EDI' 
and not exists (select 1 from queues q1 where q1.Name = @msg); 
Смежные вопросы