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

PostgreSQL查询:获取B包含指定全部值的A唯一值

问题描述

现有如下两列表格:

Column AColumn B
11
12
13
21
22
31
33

需要实现两个PostgreSQL查询需求:

  1. 给定一组B值(如[1,2]),获取所有包含该组中全部B值的唯一A值,预期结果为A = [1,2]
  2. 给定一组A值,获取所有与这些A关联的B实例

解决方案一:获取包含指定全部B值的A

方法1:GROUP BY + HAVING(通用高效)

通过分组统计每个A对应的B值覆盖情况,筛选出完全包含目标B值的记录:

SELECT "Column A"
FROM your_table_name
WHERE "Column B" IN (1, 2)
GROUP BY "Column A"
HAVING COUNT(DISTINCT "Column B") = 2; -- 2对应目标B值的总数量

COUNT(DISTINCT "Column B")用于避免同一B值重复出现导致的误判,确保A确实覆盖了所有目标B值。

方法2:INTERSECT(适合少量目标值)

对每个目标B值单独查询对应的A,再取交集得到同时满足条件的A:

SELECT "Column A" FROM your_table_name WHERE "Column B" = 1
INTERSECT
SELECT "Column A" FROM your_table_name WHERE "Column B" = 2;

逻辑直观,当目标B值数量不多时可读性强。

方法3:数组包含判断(PostgreSQL特有)

利用PostgreSQL数组函数,将每个A对应的B值聚合为数组,再判断目标数组是否被完全包含:

SELECT "Column A"
FROM your_table_name
GROUP BY "Column A"
HAVING ARRAY[1,2] <@ ARRAY_AGG("Column B");

<@是PostgreSQL的数组包含运算符,左边的目标数组必须完全存在于右边的聚合数组中。


解决方案二:获取指定A值关联的所有B

直接过滤目标A值,查询对应的B即可,如需去重则添加DISTINCT:

SELECT DISTINCT "Column B"
FROM your_table_name
WHERE "Column A" IN (1, 3); -- 替换为实际给定的A值列表

如果需要保留多对多连接表的原始关联记录(允许B值重复),去掉DISTINCT即可。


内容的提问来源于stack exchange,提问作者Samier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:35:24