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

SQLite查询需求:获取指定公司可用或无限制的促销活动

嘿,刚好能帮你解决这个SQL查询的问题!咱们先理清楚需求,再一步步写出符合要求的语句~

需求与表结构梳理

需求明确

我们需要用单条SQL查出满足以下任一条件的促销活动:

  • 直接关联了指定公司的促销
  • 未关联任何公司的促销(这类促销对所有公司生效)

表结构说明

涉及的三张表结构如下:

Promotion(idPromo, namePromo)
Company(idCompany, nameCompany)
PromoCompany(idPromo, idCompany)
核心SQL查询语句

假设我们要查询的目标公司ID是1(你可以根据实际需求替换成具体的ID,比如示例里的10或12),最终的查询语句是:

SELECT DISTINCT p.idPromo, p.namePromo
FROM Promotion p
LEFT JOIN PromoCompany pc ON p.idPromo = pc.idPromo
WHERE pc.idCompany = 1 OR pc.idPromo IS NULL;
逻辑解释

这里用了**左连接(LEFT JOIN)**来保留所有促销活动,然后通过WHERE条件精准筛选:

  • pc.idCompany = 1:筛选出和指定公司直接关联的促销
  • pc.idPromo IS NULL:筛选出没有任何公司关联的促销(左连接后没有匹配到PromoCompany的记录,这类促销对所有公司生效)
  • 加DISTINCT是为了避免同一个促销关联多个公司时出现重复结果(比如示例里的促销1关联了两家公司,查询其中一家时会返回两条重复的促销1记录,用DISTINCT就能去重)
结合数据示例验证

咱们用你给出的测试数据来验证效果:

测试数据

Promotion:
[{ idPromo:1, namePromo:"promo test" }, { idPromo:2, namePromo:"promo test 2" }]

Company:
[{ idCompany:10, nameCompany:"CompanyPloof" },{ idCompany:12, nameCompany:"CompanyPaf" } ]

PromoCompany:
[{ idPromo:1, idCompany:10 },{ idPromo:1, idCompany:12 } ]

场景1:查询CompanyPloof(idCompany=10)

把SQL里的1替换成10,执行后会返回:

  • 促销1:因为它关联了CompanyPloof(id=10)
  • 促销2:因为它没有任何公司关联限制
    结果和你预期的一致,返回idPromo=1和2的促销。

场景2:查询CompanyPaf(idCompany=12)

把SQL里的1替换成12,执行后会返回:

  • 促销1:因为它关联了CompanyPaf(id=12)
  • 促销2:因为它没有任何公司关联限制
    (注:这里和你提到的预期略有出入,可能是笔误哦~按照表数据逻辑,促销1确实对CompanyPaf生效,应该被包含在结果里)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:49