表A:
| 身份证|地位|
| - ------|- ------|
| 1个|1个|
| 第二章|四个|
表B:
| 身份证|地位|a标识符|
| - ------|- ------|- ------|
| 1个|1个|1个|
| 第二章|三个|1个|
| 三个|五个|第二章|
Table A (
id int,
status int);
Table B(
id int,
status int,
a_id int foreignt key reference A
);
当我在(1,3)中查找状态时,如何进行查询以返回这样的输出?
| 身份证|地位|阿拉伊松|
| - ------|- ------|- ------|
| 1个|1个|[{id = 1,状态= 1,a_id = 1},{id = 2,状态= 3,a_id = 1}]|
如果我在(3)中查找状态,它应该返回:
| 身份证|地位|阿拉伊松|
| - ------|- ------|- ------|
| 1个|1个|[{id = 2,状态= 3,a_id = 1}]|
如果我在(4)中查找状态,它应该返回:
| 身份证|地位|阿拉伊松|
| - ------|- ------|- ------|
| 第二章|四个|[]|
如果我在(5)中寻找状态,它应该返回:
| 身份证|地位|阿拉伊松|
| - ------|- ------|- ------|
| 第二章|四个|[{id = 2,状态= 4,a_id = 2}]|
2条答案
按热度按时间wj8zmpe11#
这是使用表
B
中的状态筛选器进行的基本查询(例如状态1,3)现在只需要对前两列进行分组并聚合JSON数组。
json_agg和json_build_object是解决方案
c3frrgcw2#
给定一组查找状态值,您可以用途:
GENERATE_SERIES
,生成可能的seek_status值JSON_BUILD_OBJECT
,从B表开始构建jsonJSON_AGG
,用于聚合jsonWHERE v.seek_status IN (1,3)
,更改所需的seek_statusORDER BY A.status DESC LIMIT 1
,以获取所有输出记录中可能的最高状态查看here演示。