You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:08:15