在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)
我编辑它使它工作,但它不再优雅.
原始(没有最后和不存在)有一个缺陷.
事实证明这并不像我想象的那么聪明.见下面的评论.如果第一个和第三个查询返回数据,它将失败.如果你只有一个联盟,但不是两个或更多联盟,它确实有用.
在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