MySQL 仅当不匹配时才选择

标签 mysql select where-clause

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

如果记录不基于第一个记录,即,我只想匹配某些条件。

如果以下匹配:

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/

相关文章:

mysql - 通过获取第一个数字字符之前的所有字符来选择 MySQL 中的邮政编码区域

mysql - 选择具有不同参数的最新记录行

javascript - 如何通过将鼠标悬停并单击 <ul> 元素中的 <li> 元素来选择它们

php - 如何在 PDO 查询中将参数添加到子句

php mysql where 子句使用日期

java - Jackcess 等效于具有 > ("strictly greater than") 条件的 SQL WHERE 子句

mysql - 如何查询两个mysql表并拉取不在两个表和/或满足条件指定的结果

c# - MySQL - 多个结果集

Mysql如何根据优先级进行选择

mysql - 如何使用 View 执行复杂的 sql 查询,而不是依赖中间(具体)表