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

3 mysql sql union

我需要这个查询:

SELECT * FROM best WHERE best = 'value' AND lang = 'x' 
   UNION 
SELECT * FROM best WHERE best = 'value' AND lang = 'custom' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

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

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

我只能做一个查询:

SELECT * FROM best WHERE best = 'value' AND lang IN ('x','custom') LIMIT 1
Run Code Online (Sandbox Code Playgroud)

但是通过这个查询我不能说更优先记录 lang = 'x'

Jan*_*čič 5

您可以使用ORDER BY FIELD():

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

这将照顾你的"优先"问题:)