關(guān)于Mysql判斷是否存在滿足某一條件的記錄
問(wèn)題描述
需求
查詢哪些用戶存在有效的優(yōu)惠券 即仍未使用且未過(guò)期
假如是查詢一個(gè)用戶的話 SQL
select 1 from user_coupon where status = ’未使用’ and current_date<=ovre_date and user_id = ’XXX’ limit 1;
只要有任一行記錄滿足條件的話即返回1, 表示存在可用的優(yōu)惠券,無(wú)需查詢出該用戶所有的有效優(yōu)惠券記錄
如果用java表述的話 相當(dāng)于
for(UserCoupon e : list){ if(e.status == 未使用 && currentDate <= e.overDate){return true; }}
但假如查詢條件是一個(gè)用戶ID列表呢? 這時(shí)好像只能用distinct或group by了,必須要先查詢出所有記錄了, 沒(méi)辦法做到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;
查詢條件為列表的情況下 有沒(méi)辦法指定只要有一條記錄滿足條件即返回 無(wú)需查詢所有 這樣的話 也省了用distinct和group by了
問(wèn)題解答
回答1:沒(méi)太看懂問(wèn)題。如果查詢條件是列表的話,你希望返回結(jié)果是所有至少有一張優(yōu)惠券的用戶嗎?如果是的話,這樣寫:select user_id, count(1) as c from user_coupon where ... group by user_id having c > 0 order by null如果百萬(wàn)級(jí)以下的表,速度應(yīng)該可以接受,但表比較大的情況下可能有性能問(wèn)題,建議用explain分析一下。
相關(guān)文章:
1. mysql - 表名稱前綴到底有啥用?2. 怎么php怎么通過(guò)數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。3. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語(yǔ)法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?4. mysql - 數(shù)據(jù)庫(kù)表中,兩個(gè)表互為外鍵參考如何解決5. 為什么php修改數(shù)據(jù)無(wú)法同步到數(shù)據(jù)庫(kù),只是當(dāng)前頁(yè)面修改成功?6. 編輯成功不顯示彈窗7. sublime可以用其他編譯器替換嗎?8. tp 6.0 數(shù)據(jù)查詢,求教!9. sql語(yǔ)句 - 如何在mysql中批量添加用戶?10. 哭遼 求大佬解答 控制器的join方法怎么轉(zhuǎn)模型方法
