我正在尝试根据名称字段的值从表中进行选择。
如果记录不基于第一个记录,即,我只想匹配某些条件。
如果以下匹配:
WHERE name='version'
如果是,则返回该单行,如果不是,也查找这些:
WHERE name='v' OR name='e' OR name='r' etc...
这可以在单个查询中实现吗?
非常感谢!
最佳答案
SELECT ...
FROM ..
WHERE name = 'version'
UNION ALL
SELECT ...
FROM ...
WHERE NOT EXISTS (
SELECT ...
FROM ..
WHERE name = 'version'
) AND name IN ('v', 'e', 'r', ...)
编辑:
不确定如何测试 mysql 是否会缓存第一个查询的结果,但假设您在新 session 中运行查询:
SELECT @cached:=1, ...
FROM ..
WHERE name = 'version'
UNION ALL
SELECT 2, ...
FROM ...
WHERE @cached IS NULL AND name IN ('v', 'e', 'r', ...)
应该可以
如果在同一 session 中您想要清除@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', ...)
关于MySQL 仅当不匹配时才选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341627/