使用自连接去重:SQL筛选指定caseID数据需求咨询
实现方案
要满足需求,我们可以通过UNION ALL结合子查询的方式来实现,具体SQL语句如下:
-- 选取hq位置的所有caseID,统一设置officeID为44 SELECT caseID, 44 AS OfficeID FROM a_table1 WHERE location = 'hq' UNION ALL -- 选取satellite位置中未在hq出现过的caseID,统一设置officeID为44 SELECT caseID, 44 AS OfficeID FROM a_table1 satellite_data WHERE location = 'satellite' AND NOT EXISTS ( SELECT 1 FROM a_table1 hq_data WHERE hq_data.location = 'hq' AND hq_data.caseID = satellite_data.caseID )
逻辑说明
- 第一部分查询直接筛选出
location = 'hq'的所有记录,将结果的OfficeID固定为44 - 第二部分查询筛选
location = 'satellite'的记录,通过NOT EXISTS子查询排除那些已经在hq中存在的caseID,同样设置OfficeID为44 - 使用
UNION ALL合并两部分结果,因为两部分数据不会有重复值,比UNION效率更高
验证结果
执行上述语句后,得到的结果与期望输出完全一致:
| caseID | OfficeID |
|---|---|
| 23 | 44 |
| 86 | 44 |
| 26 | 44 |
| 32 | 44 |
| 15 | 44 |
| 33 | 44 |
| 17 | 44 |
内容的提问来源于stack exchange,提问作者Kung Fu Ninja
相关产品推荐
相关产品推荐

