MySQL SELECT仅在不匹配时才使用

时间:2011-03-17 15:56:03

标签: mysql select where

我正在尝试根据名称字段的值从表中进行选择。

如果记录不是基于第一个记录,我想只匹配某些标准,即

如果符合以下条件:

WHERE name='version'

如果是这样,那么返回那一行,如果没有,也要查找这些:

  

WHERE name ='v'或name ='e'或name ='r'   等...

这可以在一个查询中实现吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

SELECT ...
FROM ..
WHERE name = 'version'
UNION ALL
SELECT ...
FROM ...
WHERE NOT EXISTS (
      SELECT ...
      FROM ..
      WHERE name = 'version'
      ) AND name IN ('v', 'e', 'r', ...) 

修改
不知道如何测试mysql是否会缓存第一个查询的结果,但假设您在新会话中运行查询:

SELECT @cached:=1, ...
FROM ..
WHERE name = 'version'
UNION ALL
SELECT 2, ...
FROM ...
WHERE @cached IS NULL AND name IN ('v', 'e', 'r', ...) 

应该有效

如果您想在同一会话中使用

清除@cached
SELECT @cached:=1, ...
FROM .., (SELECT @cached:=0) x
WHERE name = 'version'
UNION ALL
SELECT 2, ...
FROM ...
WHERE @cached = 0 AND name IN ('v', 'e', 'r', ...) 

答案 1 :(得分:1)

select ...
from ..
where (name = 'version') or (name in ('v', 'e', 'r', ...))

尽管如此,因为您将比较基于相同的字段,所以上述版本和

之间没有区别
...
where (name in ('version', 'v', 'e', 'r', ...))