如何在优先查询中使用OR?

Goo*_*bot 5 mysql select mysql-5.5

在一个简单的查询中

SELECT * 
FROM table
WHERE id='x' OR id='y'
Run Code Online (Sandbox Code Playgroud)

如何优先获得仅其中一个WHERE条款?

我的意思是用id='x'. 仅当没有行时,获取行id='y'

换句话说,id='y'如果有一行则不要使用id='x'

Dav*_*ett 3

SELECT * 
FROM   table
WHERE  id IN ('x', 'y')
AND    (id='x' OR NOT EXISTS(SELECT id FROM table WHERE id='x'))
Run Code Online (Sandbox Code Playgroud)

应该可以解决这个问题(警告:我是一个 MSSQL 人员,还没有在 mySQL 中尝试过,但我怀疑语法在那里也被接受得很好),尽管效率将取决于有多少行与第一个过滤子句匹配(对于与该部分匹配的每一行,id='x' OR id='y'EXISTS部分中的子查询可能会运行,除非查询规划器足够聪明,可以看到它不依赖于外部查询中的任何内容,因此可以运行一次并重用结果 - 如果您只期望最多两个(我怀疑列名就是id这种情况)这不应该是问题)