按不可连接列中的最大值左连接 1:M 关系
Left join on 1:M relation by maximum value in non joinable column
我正在使用 SQL.
在 PostgreSQL 数据库上解决此类问题
我有 2 个 table,为简单起见,假设它们只有这些列并且具有 1:M 关系。
Table答:
Name
Type
Note
id
long
primary key
state
string
string holding enum value (for simplicity assume values X,Y,Z
Table乙:
Name
Type
Note
id
long
primary key
a_id
long
foreign key to A table
max
long
column holding maximum of bid
user_id
long
user who bid this bid
我对 SQL 结果的期望:
Select 所有 table 处于状态 Z 和 table B 的 user_id 的 A id 记录了 最高,user_id等于1(所以如果tableB中有3条记录的最大列值为(1,2,3),则select 最大值为 3)
的行
业务要求进一步说明问题:
获取所有 A table 行 ID,它们处于状态 Z 并且具有某个变量 ID(为简单起见,假设为 1)的用户在 table B 中的所有子项中具有最大值。
我试着在 a.id = b.a_id 上做一些 LEFT JOIN,我知道会有一些 AND 和一些内部 select with MAX()。但是当我不最大化连接列时,我不确定如何执行 select max()。
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;
我正在使用 SQL.
在 PostgreSQL 数据库上解决此类问题我有 2 个 table,为简单起见,假设它们只有这些列并且具有 1:M 关系。
Table答:
Name | Type | Note |
---|---|---|
id | long | primary key |
state | string | string holding enum value (for simplicity assume values X,Y,Z |
Table乙:
Name | Type | Note |
---|---|---|
id | long | primary key |
a_id | long | foreign key to A table |
max | long | column holding maximum of bid |
user_id | long | user who bid this bid |
我对 SQL 结果的期望:
Select 所有 table 处于状态 Z 和 table B 的 user_id 的 A id 记录了 最高,user_id等于1(所以如果tableB中有3条记录的最大列值为(1,2,3),则select 最大值为 3)
的行业务要求进一步说明问题:
获取所有 A table 行 ID,它们处于状态 Z 并且具有某个变量 ID(为简单起见,假设为 1)的用户在 table B 中的所有子项中具有最大值。
我试着在 a.id = b.a_id 上做一些 LEFT JOIN,我知道会有一些 AND 和一些内部 select with MAX()。但是当我不最大化连接列时,我不确定如何执行 select max()。
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;