关于Mysql判断是否存在满足某一条件的记录
问题描述
需求
查询哪些用户存在有效的优惠券 即仍未使用且未过期
假如是查询一个用户的话 SQL
select 1 from user_coupon where status = ’未使用’ and current_date<=ovre_date and user_id = ’XXX’ limit 1;
只要有任一行记录满足条件的话即返回1, 表示存在可用的优惠券,无需查询出该用户所有的有效优惠券记录
如果用java表述的话 相当于
for(UserCoupon e : list){ if(e.status == 未使用 && currentDate <= e.overDate){return true; }}
但假如查询条件是一个用户ID列表呢? 这时好像只能用distinct或group by了,必须要先查询出所有记录了, 没办法做到limit 1了
select distinct user_id from user_coupon where ... and user_id in (XXX,XXX,XXX);selec user_id from user_coupon where ... and user_id in (XXX,XXX,XXX) group by user_id;
查询条件为列表的情况下 有没办法指定只要有一条记录满足条件即返回 无需查询所有 这样的话 也省了用distinct和group by了
问题解答
回答1:没太看懂问题。如果查询条件是列表的话,你希望返回结果是所有至少有一张优惠券的用户吗?如果是的话,这样写:select user_id, count(1) as c from user_coupon where ... group by user_id having c > 0 order by null如果百万级以下的表,速度应该可以接受,但表比较大的情况下可能有性能问题,建议用explain分析一下。
相关文章:
1. docker-machine添加一个已有的docker主机问题2. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下3. docker网络端口映射,没有方便点的操作方法么?4. 请问怎么改变超链接字体的颜色?5. docker内创建jenkins访问另一个容器下的服务器问题6. angular.js - angular2 有什么cool的loading组件么?7. java编程思想第4版中文版的几处谬误?8. java - 做数据库向手机端的推送要系统地学习哪些知识?求大神指点,谢谢!9. 关于docker下的nginx压力测试10. 关docker hub上有些镜像的tag被标记““This image has vulnerabilities””
![docker-machine添加一个已有的docker主机问题](http://www.haobala.com/attached/image/news/202311/1028320972.png)