MySQL查询需求:获取无ort=gemeinde记录的PLZ值
查询无任何
ort=gemeinde记录的PLZ列表 需求说明
需要筛选出这样的PLZ:该PLZ对应的所有数据行中,不存在任何一条记录的ort等于gemeinde(即该PLZ下所有记录的ort都不等于gemeinde)。以示例数据为例,仅PLZ 2000符合条件,因为PLZ 1000存在ort=gemeinde的记录。
示例数据表
| plz | ort | gemeinde |
|---|---|---|
| 1000 | uttenthal | buchkirchen |
| 1000 | buchkirchen | buchkirchen |
| 2000 | mistelbach | buchkirchen |
| 2000 | unterholz | buchkirchen |
解决方案SQL
方法1:GROUP BY + HAVING(易懂,适合新手)
SELECT plz FROM 你的表名 GROUP BY plz HAVING COUNT(CASE WHEN ort = gemeinde THEN 1 END) = 0;
方法2:NOT EXISTS(逻辑直观)
SELECT DISTINCT plz FROM 你的表名 t1 WHERE NOT EXISTS ( SELECT 1 FROM 你的表名 t2 WHERE t2.plz = t1.plz AND t2.ort = t2.gemeinde );
语句解释
方法1:
GROUP BY plz:将相同PLZ的记录归为一组COUNT(CASE WHEN ort = gemeinde THEN 1 END):统计每个PLZ分组里,ort=gemeinde的记录数量HAVING ... =0:只保留统计数为0的PLZ,也就是没有任何ort=gemeinde记录的PLZ
方法2:
SELECT DISTINCT plz:避免重复输出同一个PLZNOT EXISTS(...):检查当前PLZ是否不存在任何ort=gemeinde的记录,不存在则保留该PLZ
注意事项
把语句里的你的表名替换成实际的表名称即可运行。
内容的提问来源于stack exchange,提问作者Christian Krätschmer
相关产品推荐
相关产品推荐

