如何基于productId和categoryId执行IN条件查询?
基于productId和categoryId的IN条件查询实现方法
针对你提供的优惠活动数据(categoryId和productId为数组类型),以下是不同技术场景下的IN条件查询实现方案:
一、关系型数据库(MySQL/PostgreSQL等)SQL查询
根据业务需求,分为两种常见查询逻辑:
1. 匹配categoryId或productId的任意值
查询满足任一ID数组条件的记录:
SELECT * FROM offers WHERE categoryId IN ('62de9b22dcafd44290ab03c1', '62dfe695ec4d69cfeab0265d') OR productId IN ('633170230e88e2d859d15ee6', '62de9d102b2b72f80eda7585', '62de9d1e2b2b72f80eda7588');
2. 同时匹配categoryId和productId的对应值
查询同时满足两个ID数组条件的记录:
SELECT * FROM offers WHERE categoryId IN ('62de9b22dcafd44290ab03c1', '62dfe695ec4d69cfeab0265d') AND productId IN ('633170230e88e2d859d15ee6', '62de9d102b2b72f80eda7585', '62de9d1e2b2b72f80eda7588');
二、MyBatis框架实现
如果使用MyBatis作为持久层框架,可通过以下方式实现动态IN查询:
1. XML映射文件方式
<select id="getOffersByIds" resultType="com.your.pojo.Offer"> SELECT * FROM offers WHERE categoryId IN <foreach collection="categoryIds" item="id" open="(" separator="," close=")"> #{id} </foreach> AND productId IN <foreach collection="productIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </select>
2. 注解方式
@Select("SELECT * FROM offers WHERE categoryId IN (#{categoryIds}) AND productId IN (#{productIds})") List<Offer> getOffersByIds( @Param("categoryIds") List<String> categoryIds, @Param("productIds") List<String> productIds );
三、MongoDB查询(NoSQL场景)
针对MongoDB文档型数据库,使用查询文档实现IN条件匹配:
1. 匹配categoryId或productId的任意值
db.offers.find({ $or: [ { categoryId: { $in: ["62de9b22dcafd44290ab03c1", "62dfe695ec4d69cfeab0265d"] } }, { productId: { $in: ["633170230e88e2d859d15ee6", "62de9d102b2b72f80eda7585", "62de9d1e2b2b72f80eda7588"] } } ] })
2. 同时匹配categoryId和productId的对应值
db.offers.find({ categoryId: { $in: ["62de9b22dcafd44290ab03c1", "62dfe695ec4d69cfeab0265d"] }, productId: { $in: ["633170230e88e2d859d15ee6", "62de9d102b2b72f80eda7585", "62de9d1e2b2b72f80eda7588"] } })
内容的提问来源于stack exchange,提问作者Meet Panchal
相关产品推荐
相关产品推荐

