SQL查询需求:仅返回符合条件的最后一行,否则返回空集
解决方案
可以通过子查询先锁定最新行,再在外层进行条件过滤,实现你的需求:
SELECT * FROM ( SELECT * FROM table ORDER BY id DESC LIMIT 1 ) AS latest_row WHERE value = 'pass';
逻辑说明
- 子查询
SELECT * FROM table ORDER BY id DESC LIMIT 1会先取出ID最大的那一行(也就是你说的最后一行); - 外层查询对这唯一的一行做
value = 'pass'的判断,只有符合条件时才返回该行数据,否则返回空结果集,完全避免了直接加WHERE会返回ID=3的情况。
另外,如果你的数据库支持无GROUP BY时使用HAVING(比如MySQL),也可以用更简洁的写法:
SELECT * FROM table ORDER BY id DESC LIMIT 1 HAVING value = 'pass';
这个写法利用LIMIT 1先拿到最新行,再通过HAVING过滤该行的value值,效果和子查询写法一致,但兼容性稍差,建议优先使用子查询写法。
内容的提问来源于stack exchange,提问作者Jiri Zaloudek
相关产品推荐
相关产品推荐

