如何编写SQL查询筛选所有邮编均在指定数组中的城市
筛选所有邮编均在指定数组中的城市
需求说明
- 目标:仅返回所有对应邮编都包含在指定数组内的城市
- 指定邮编数组:
[41200, 41201, 41202, 42500, 42501, 42504, 42505, 42506] - 现有查询:已通过子查询按
gmina(城市)聚合了对应的去重邮编字符串,需补充WHERE子句完成筛选
解决方案
通过关联原表检查当前城市是否存在不在指定数组中的邮编,若不存在则保留该城市。补充后的WHERE子句如下:
WHERE NOT EXISTS ( SELECT 1 FROM ser_strumieniowanie_kody ser LEFT JOIN hog_miasta hog ON ser.st_kod = hog.kod WHERE ser.pm = ser.av AND hog.gmina = subquery.gmina AND ser.kod NOT IN (41200, 41201, 41202, 42500, 42501, 42504, 42505, 42506) )
完整SQL代码
SELECT gmina, kody FROM ( SELECT gmina, STRING_AGG(DISTINCT kod, ', ') AS kody FROM ser_strumieniowanie_kody ser LEFT JOIN hog_miasta hog ON ser.st_kod = hog.kod WHERE ser.pm = ser.av GROUP BY gmina ) AS subquery WHERE NOT EXISTS ( SELECT 1 FROM ser_strumieniowanie_kody ser LEFT JOIN hog_miasta hog ON ser.st_kod = hog.kod WHERE ser.pm = ser.av AND hog.gmina = subquery.gmina AND ser.kod NOT IN (41200, 41201, 41202, 42500, 42501, 42504, 42505, 42506) )
逻辑说明
NOT EXISTS子句会检查当前城市(subquery.gmina)是否存在任何一个邮编不在指定数组中:
- 若存在此类邮编,该城市会被排除
- 若不存在,则说明该城市所有邮编都在指定数组内,符合需求被保留
内容的提问来源于stack exchange,提问作者Robert Juszczyński
相关产品推荐
相关产品推荐

