關于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. python - 數據與循環次數對應不上2. mysql - 把一個表中的數據count更新到另一個表里?3. 請教使用PDO連接MSSQL數據庫插入是亂碼問題?4. mysql - 分庫分表、分區、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處5. Python爬蟲如何爬取span和span中間的內容并分別存入字典里?6. 視頻文件不能播放,怎么辦?7. mysql 查詢身份證號字段值有效的數據8. python - 爬蟲模擬登錄后,爬取csdn后臺文章列表遇到的問題9. node.js - nodejs開發中常用的連接mysql的庫10. 黑客 - Python模塊安全權限
