【发布时间】:2019-06-23 16:10:10
【问题描述】:
我正在尝试将多个查询包装成 1 个复杂查询。
这里是场景。给定“xxxxx-xx-xxxxx”的user_id,我必须在多个表中查询多个数据点。我将下面的大部分查询都包含了一些 JOIN,但我真的很想看看是否有可能获得我获得 用户名 和 电子邮件 的最后一个查询strong> 包装成作为对象存储的ALIAS 列?我不确定这是否可能,但这里是分解的查询..
漫漫长路
查询 1:
SELECT * FROM requests WHERE created_by = 'xxxx-xx-xxxxx';
此查询将返回这样的一行:
id | created_by | created_date ...
1141 xxxx-xx-xxxxx 2019-04-09 19:33:40.889+00 ...
然后我必须运行另一个查询来查找返回 id 的所有批准者 查询 2:
SELECT * FROM approvers WHERE request_id = 1141
这可能会返回很多行:
request_id | user_id | decision | type | .....
1141 xxxxx-xx-xxxxx approve approver ......
1141 aaaaa-aa-aaaaa approve approver ......
1141 bbbbb-bb-bbbbb under review watcher ......
1141 ccccc-cc-ccccc reject approver .......
最后要找到我必须运行查询的用户名(对于查询 2 的每个返回行) 查询 3、4、5、6:
SELECT * FROM users WHERE id = 'xxxx-xx-xxxxx' LIMIT 1
将返回:
id | given_name | family_name | email | .....
xxxx-xx-xxxxx John Doe johndoe@email.com ....
是否可以运行子查询并创建 approver_info 的 ALIAS 列,并将关联的批准者和用户存储为 JSON 对象?
所需查询/结果:
1 个查询:
SELECT * FROM requests
WHERE created_by = 'xxxxx-xx-xxxxx'
SUBQUERY HERE ...
这将产生以下结果:
id | created_by | created_date | approver_info ...
1141 xxxx-xx-xxxxx 2019-04-09 19:33:40.889+00 [{"id" : "xxxxx-xx-xxxxx", "given_name" : "John", "family_name" : "Doe", "email":"john@email.com","decision" : "approve", "type" : "approver"},
{"id" : "aaaaa-aa-aaaaa", "given_name" : "Sansa", "family_name" : "Stark", "email":"sansa@.com","decision" : "approve", "type" : "approver"},
{"id" : "bbbbb-bb-bbbbb", "given_name" : "Arya", "family_name" : "Stark", "email":"arya@email.com","decision" : "under review", "type" : "watcher"},
{"id" : "ccccc-cc-ccccc", "given_name" : "Ned", "family_name" : "Stark", "email":"ned@email.com","decision" : "approve", "type" : "approver"}]
【问题讨论】:
-
您的 Postgres 版本和实际的基本表定义(
CREATE TABLE语句)将很有帮助。假设users.id是表的主键,那为什么LIMIT 1呢?
标签: sql json postgresql join