首页 新闻 会员 周边

sqlserver 查询是否全部匹配或者匹配个数>=N

0
悬赏园豆:10 [已解决问题] 解决于 2022-04-16 17:56

我有两张表:

 dt_order_commoditys     订单商品表
 orderID 订单ID  comID   商品ID
 001  1
 001  2
 001  3
002 1
003 1
 003   3 

 

 dt_commodity2categorys 商品类别中间表。一个商品有多个分类记录
  comID   商品ID   categoryID   分类ID
 1  10
 1 20
 1 30 
 1  2010
 2  2010
 2  3010
 2  8010
 3  10
 3  4010
 3  401010
 3  5010
 3  5020
 3  60


 现在的需求有两种情况。页面上面有一个报表功能,用户选择多个商品分类,比如他选择了三个分类,需要找到全部包含三个分类的订单,或者是选了五个分类,需要找到至少包含三个分类的订单。

  都是通过传入类别ID筛选出订单ID:

  第一种是,我传入 三个类别ID过来,要求筛选出全部包含三个商品类别的订单ID,比如我传类别ID  20、3010、10过来,就筛选出001订单,因为001订单中所有商品类别(就是dt_commodity2categorys所有数据)全包含 20、3010、10。 如果传20、3010、10、9010,那么就没有数据。

 

  第二种情况是,我传入多个类别ID过来,只要能匹配到2个及以上类别就符合条件。比如我传类别20、3010、1010、9010、4010、8010过来,就筛选出 001订单和003订单,如果传类别20、3010、1010、9010、4020、8010,就只筛选出 001订单。

 

跪求大佬帮忙看看这种情况怎么解决啊!

尾随前行的主页 尾随前行 | 初学一级 | 园豆:0
提问于:2022-04-15 00:11
< >
分享
最佳答案
1

SQL如下:

-- 传入:'20','2010','10'  3是传进来的categoryID个数,全匹配
SELECT * FROM dt_commodity2categorys WHERE comID IN (SELECT comID FROM dt_commodity2categorys WHERE categoryID IN ('20','2010','10')
GROUP BY comID HAVING(COUNT(comID))=3)

-- 传入:'20','2010','1010','9010','4010','8010'  2是指定的个数,部分匹配
SELECT * FROM dt_commodity2categorys WHERE comID IN (SELECT comID FROM dt_commodity2categorys WHERE categoryID IN ('20','2010','1010','9010','4010','8010')
GROUP BY comID HAVING(COUNT(comID))>=2)

-- 传入:'20','2010','1010','9010','4010','8020'  2是指定的个数,部分匹配
SELECT * FROM dt_commodity2categorys WHERE comID IN (SELECT comID FROM dt_commodity2categorys WHERE categoryID IN ('20','2010','1010','9010','4010','8020')
GROUP BY comID HAVING(COUNT(comID))>=2)
收获园豆:10
三人乐乐 | 老鸟四级 |园豆:4819 | 2022-04-15 09:40

你好,大佬。

可能我之前描述的不够明确,导致你理解错意思了。

就是我页面上面有一个报表功能,用户选择多个商品分类,比如他选择了三个分类,需要找到全部包含三个分类的订单,或者是选了五个分类,需要找到至少包含三个分类的订单。

我根据大佬提供的语句进行执行,找出来的是商品,但是没办法归整到订单那边去。

尾随前行 | 园豆:0 (初学一级) | 2022-04-15 12:22

@尾随前行: 你是要找订单吗?如果是,外层SQL中把dt_commodity2categorys表换成dt_order_commoditys表查

三人乐乐 | 园豆:4819 (老鸟四级) | 2022-04-15 14:02

@三人乐乐: 不对的哥,你sql中是按comID分组和出现次数来筛选的,我是想要以每个订单为一组来匹配分类ID数量的。 不知道我这样说表达的清楚不

尾随前行 | 园豆:0 (初学一级) | 2022-04-15 18:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册