如何使用SQL筛选关联指定供应商的全部JobID数据?
可以用SQL实现该需求
当然可以通过SQL实现你要的效果,下面是几种针对你场景的常用写法(假设你的表名为job_vendors):
方法1:子查询筛选目标JobID
先找出所有关联Vendor A的JobID,再取出这些JobID对应的全部记录:
SELECT j.* FROM job_vendors j WHERE j.JobID IN ( SELECT JobID FROM job_vendors WHERE Vendor = 'Vendor A' );
方法2:窗口函数标记目标JobID
通过窗口函数统计每个JobID下是否存在Vendor A,再过滤出符合条件的记录:
SELECT JobID, Vendor FROM ( SELECT JobID, Vendor, -- 统计当前JobID下Vendor A的数量 COUNT(CASE WHEN Vendor = 'Vendor A' THEN 1 END) OVER (PARTITION BY JobID) AS has_vendor_a FROM job_vendors ) t -- 只要数量大于0,说明该JobID包含Vendor A WHERE has_vendor_a > 0;
方法3:JOIN关联目标JobID
先提取关联Vendor A的唯一JobID列表,再和原表关联获取全部记录:
SELECT j.* FROM job_vendors j JOIN ( SELECT DISTINCT JobID FROM job_vendors WHERE Vendor = 'Vendor A' ) a_jobs ON j.JobID = a_jobs.JobID;
这几种写法都能得到你期望的输出,具体选择哪种可以根据你的数据量和现有索引情况决定:
- 子查询写法最直观,适合大多数简单场景;
- 窗口函数适合需要同时处理更多分组逻辑的场景;
- JOIN写法在数据量较大时,若JobID有索引,性能可能更优。
内容的提问来源于stack exchange,提问作者Morgan McIntyre
相关产品推荐
相关产品推荐

