如果没有结果,则另一个WHERE子句

jim*_*mmy 5 mysql

在mysql的一个查询中执行此操作的最佳方法是什么?

SELECT * FROM products WHERE language = 1
Run Code Online (Sandbox Code Playgroud)

如果没有结果

SELECT * FROM products WHERE language = 2 AND country = 1
Run Code Online (Sandbox Code Playgroud)

如果没有结果

SELECT * FROM products WHERE language = 2 AND country = 2
Run Code Online (Sandbox Code Playgroud)

Sha*_*cci 7

我编辑它使它工作,但它不再优雅.


原始(没有最后和不存在)有一个缺陷.

事实证明这并不像我想象的那么聪明.见下面的评论.如果第一个和第三个查询返回数据,它将失败.如果你只有一个联盟,但不是两个或更多联盟,它确实有用.


在mysql中很容易:

select SQL_CALC_FOUND_ROWS * from products where language = 1
union
SELECT * FROM products WHERE language = 2 AND country = 1 and found_rows()=0
union
SELECT * FROM products WHERE language = 2 AND country = 2 and found_rows()=0 
AND not exists(select * from products where language = 1)
Run Code Online (Sandbox Code Playgroud)

请参阅此处对found_rows()和SQL_CALC_FOUND_ROWS的讨论:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows