mysql如果列中存在其他值

时间:2014-12-22 08:49:46

标签: mysql stored-procedures

我正在尝试在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

如何改进查询?

3 个答案:

答案 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)

您可以使用unionnot 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);