You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询与指定ArticleID集合完全匹配的购物车ID

找出恰好包含指定商品集合的购物车

需求说明

现有article、shopping cart、ShoppingCartArticle三张表构成多对多关联,需修改查询逻辑,找出**恰好包含指定ArticleID集合(示例为1、2)**的购物车,期望输出购物车ID 1。

解决思路

要实现“恰好包含”的判断,需同时满足两个核心条件:

  • 购物车关联的所有商品ID都属于指定集合
  • 购物车关联的商品数量与指定集合的商品数量完全相等

另外,由于@ArticleList是字符串格式的ID列表,需要先将其拆分为可用于关联查询的表结构。

实现代码

DECLARE @ArticleList VARCHAR(MAX) = '1,2';

-- 将字符串ID列表转为行数据
WITH SplitArticles AS (
    SELECT CAST(value AS INT) AS ArticleID
    FROM STRING_SPLIT(@ArticleList, ',')
),
-- 统计每个购物车的商品总数、匹配指定集合的商品数
CartArticleStats AS (
    SELECT 
        sca.ShoppingCartID,
        COUNT(*) AS TotalArticles,
        SUM(CASE WHEN sa.ArticleID IS NOT NULL THEN 1 ELSE 0 END) AS MatchedArticles
    FROM ShoppingCartArticle sca
    LEFT JOIN SplitArticles sa ON sca.ArticleID = sa.ArticleID
    GROUP BY sca.ShoppingCartID
),
-- 获取指定集合的商品总数
TargetArticleCount AS (
    SELECT COUNT(*) AS Count FROM SplitArticles
)

SELECT cas.ShoppingCartID
FROM CartArticleStats cas
CROSS JOIN TargetArticleCount tac
WHERE cas.TotalArticles = tac.Count 
  AND cas.MatchedArticles = tac.Count;

代码说明

  1. SplitArticles:使用STRING_SPLIT函数将字符串格式的ID列表拆分为独立行(该函数适用于SQL Server 2016及以上版本),方便后续关联判断。
  2. CartArticleStats:按购物车ID分组,统计每个购物车的总商品数,以及其中属于指定集合的商品数量。
  3. TargetArticleCount:统计指定集合的商品总数,作为判断“恰好包含”的基准值。
  4. 最终查询:筛选出总商品数等于指定集合数量、且匹配商品数也等于指定集合数量的购物车,确保购物车仅包含指定的所有商品,无额外商品。

内容的提问来源于stack exchange,提问作者dimitro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:49:54