首页 > 解决方案 > 通过不可连接列中的最大值在 1:M 关系上左连接

问题描述

我正在使用 SQL 解决 PostgreSQL 数据库上的此类问题。

我有 2 个表,为简单起见,假设它们只有这些列并且具有 1:M 关系。

表 A:

姓名 类型 笔记
ID 首要的关键
状态 细绳 保存枚举值的字符串(为简单起见,假设值 X、Y、Z

表 B:

姓名 类型 笔记
ID 首要的关键
援助 A表的外键
最大限度 持有最高出价的栏目
用户身份 出价的用户

我对 SQL 结果的期望:

选择处于状态 Z 的所有表 A id和表 B 记录的 user_id 最高且 user_id 等于 1(因此,如果表 B 中有 3 条记录具有最大列值(1,2,3),则选择最大值为 3) 的行

业务要求进一步澄清问题:

获取所有 A 表行 id,它们处于状态 Z,并且具有一些可变 ID 的用户(为简单起见,假设为 1)在表 B 中的所有子项中具有最大值。

我尝试在 a.id = b.a_id 上进行一些左连接,我知道会有一些 AND 和一些带有 MAX() 的内部选择。但是当我不最大化连接列时,我不确定如何执行 select max() 。

标签: sqlpostgresqlhql

解决方案


SELECT * FROM
table_a a1 JOIN table_b b1 ON (a1.id=b1.a_id) WHERE (a_id,max) in
(SELECT a_id,max(max) FROM
table_a a JOIN table_b b ON (a.id=b.a_id) GROUP BY b.a_id) and b1.user_id=1;

推荐阅读