MySQL:仅当第一个查询未返回结果时才执行第二个查询

标签 mysql sql union

我需要这个查询:

SELECT * FROM best WHERE best = 'value' AND lang = 'x' 
   UNION 
SELECT * FROM best WHERE best = 'value' AND lang = 'custom' 
LIMIT 1

基本上我只需要一条记录,其中 best = 'value' 和 lang = 'x',如果找不到这条记录,那么我需要使用 lang = 执行第二个查询'自定义'

MySQL 是否足够聪明,能够理解考虑到存在 LIMIT 1,当 union 的第一个查询返回一些东西时,他不需要执行第二个查询

我可以做一个查询:

SELECT * FROM best WHERE best = 'value' AND lang IN ('x','custom') LIMIT 1

但是对于这个查询,我不能说使用 lang = 'x'

优先记录

最佳答案

你可以使用 ORDER BY FIELD() :

SELECT
  *
FROM
  best
WHERE
  best = 'value'
  AND lang IN ( 'x', 'custom' )
ORDER BY FIELD ( lang, 'x', 'custom' )
LIMIT
  1

这将解决您的“优先”问题:)

关于MySQL:仅当第一个查询未返回结果时才执行第二个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353974/

相关文章:

php - 使用选定的 url 参数重定向到页面

mysql - 组合 2 个表,希望保留 DUPLICATE KEY 上的所有非 0 位

mysql - Compex MySQL Left Join 使用元表中的多个条目

postgresql - 根据表值合并两列

mysql - 如何访问子查询中的列?

c# - LINQ 中两个列表的并集不起作用

mysql - Python在mysql上的INSERT INTO中转义特殊字符

mysql - 按 ID 计算每列中的 ID

php - 如何将大型维基百科 sql 文件导入 mysql 数据库?

sql - 使用嵌套表时如何避免在触发器中改变表,并更新到另一个表?