我正在尝试根据名称字段的值从表中进行选择。
如果记录不是基于第一个记录,我想只匹配某些标准,即
如果符合以下条件:
WHERE name='version'
如果是这样,那么返回那一行,如果没有,也要查找这些:
WHERE name ='v'或name ='e'或name ='r' 等...
这可以在一个查询中实现吗?
非常感谢!
答案 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', ...))