SQL查询实现:仅当套装所有商品均符合用户预算时返回对应SetID
解决思路
你可以通过分组聚合+全匹配校验的逻辑实现需求,核心是比对套装内总商品数和符合预算要求的商品数是否完全相等。
可直接使用的SQL
针对你给出的UserID=1的场景,写法如下:
SELECT b.SetID FROM ItemCosts b LEFT JOIN UserBudget a ON a.ItemID = b.ItemID AND a.UserID = 1 AND a.ItemBudget >= b.ItemPrice GROUP BY b.SetID HAVING COUNT(*) = COUNT(a.ItemID)
逻辑说明
LEFT JOIN关联时直接把用户ID、商品匹配、预算充足三个条件都放在关联规则里,不满足条件的记录UserBudget侧的字段会返回NULL- 按
SetID分组后,COUNT(*)统计的是当前套装的总商品数量,COUNT(a.ItemID)统计的是符合预算要求的商品数量 - 两者相等时说明套装内所有商品都满足要求,会被筛选返回
如果需要关联Sets表获取完整的套装信息,可以调整为:
SELECT c.* FROM Sets c INNER JOIN ItemCosts b ON c.SetID = b.SetID LEFT JOIN UserBudget a ON a.ItemID = b.ItemID AND a.UserID = 1 AND a.ItemBudget >= b.ItemPrice GROUP BY c.SetID HAVING COUNT(*) = COUNT(a.ItemID)
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

