PostgreSQL如何获取无主地址的所有用户地址记录?
解决PostgreSQL 9.4中获取无主地址用户的所有地址记录问题
没问题,我来帮你搞定这个查询需求。根据你的描述,我们需要找出那些**完全没有设置主地址(该用户的所有地址is_primary均为false)**的用户,然后返回他们的全部地址记录。
方法一:排除有主地址的用户
我们可以先通过子查询找出所有拥有主地址的用户ID,然后在主查询中过滤掉这些用户的地址记录:
SELECT a.* FROM addresses a WHERE a.user_id NOT IN ( SELECT DISTINCT user_id FROM addresses WHERE is_primary = true );
逻辑说明:
- 子查询
SELECT DISTINCT user_id FROM addresses WHERE is_primary = true会提取所有存在主地址的用户ID; - 主查询通过
NOT IN排除这些用户,剩下的就是没有主地址的用户的所有地址。
方法二:分组验证用户无主地址
另一种思路是先按用户分组,验证该用户的所有地址中没有主地址,再关联回地址表获取完整记录:
SELECT a.* FROM addresses a JOIN ( SELECT user_id FROM addresses GROUP BY user_id HAVING MAX(is_primary) = false ) AS no_primary_users ON a.user_id = no_primary_users.user_id;
逻辑说明:
- 子查询按
user_id分组,利用MAX(is_primary)来判断:如果用户有任何一个主地址(is_primary = true),MAX结果会是true;只有当所有地址都是false时,MAX结果才是false; - 通过
JOIN关联地址表,就能拿到这些符合条件的用户的全部地址记录。
结果验证
这两个查询都会返回你预期的结果:用户1和用户2的所有地址记录,完全符合需求。两种方法在PostgreSQL 9.4中都能正常运行,你可以根据自己的习惯选择使用。
内容的提问来源于stack exchange,提问作者Shift 'n Tab
相关产品推荐
相关产品推荐

