我正在尝试在if else
子句中使用where
条件。
我尝试过以下查询。
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不存在,那么 我想要返回 IDI EDI 。
如何改进查询?
答案 0 :(得分:0)
我从未在MySQL服务器上使用过CASE-Statements,只使用过MS SQL Server。 我想,你在WHERE子句中没有正确的比较。 在上面的陈述中,您将始终在Case When中运行,因此您的Statement ist
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'
所以你将有q.Name=@msg或q.Name ='EDI',取决于q.Name的值。
答案 1 :(得分:0)
尝试:
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'
答案 2 :(得分: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);