postgresql - 如何使用 postgres 从子查询中获取行的关联数组

标签 postgresql database-design subquery

我是 postgres 的新手,在我从 mySQL 过渡之前尝试了一些东西。

我想做的是将一组关联数组放入单个查询中。 它与可以选择多种联系类型(如电话、电子邮件和 Facebook)的用户有关,我想将它们检索到“联系人”列中。

可视化:

{
"first_name": "This",
"last_name": "is me",
"likes": [],
"city": null

我想得到这样的东西:

{
"first_name": "This",
"last_name": "Is me",
"likes": [],
"city": null,
"contact": 
    [
      {"type":1, "value":"myemail@gmail.com", "privacy_rule":1},
      {"type":4, "value":"myfacebook", "privacy_rule":1},
      {"type":9, "value":"mylinkedin", "privacy_rule":1}
    ]
}

所以主要查询是:

SELECT u.first_name, u.last_name, u.about, ARRAY(SELECT like_id FROM users_likes l WHERE l.user_id = u.user_id), u.city FROM users u WHERE user_id = {id}

子查询将是:

SELECT c.type, c.value, c.privacy_rule FROM users_contact c WHERE c.user_id = u.user_id

但是如何将它集成到主查询中以返回结果行数组? 有可能吗?

提前致谢!

罗恩

最佳答案

啊,经过更多的填充,这里是答案。 使用 json_build_object:

SELECT u.first_name, u.last_name, 
ARRAY(SELECT like_id FROM users_likes l WHERE l.user_id = u.user_id) as likes, 
ARRAY(SELECT json_build_object("contact_id", c.contact_id, 
"value", c.value, "privacy",c.privacy) 
FROM users_contact c WHERE c.user_id = u.user_id) as contact 
FROM users_basic u WHERE user_id = {id}

这给出:

"first_name": "This",
"last_name": "Is Me",
"about": null,
"likes": [],
"city": null,
"contact": [
  {
    "contact_id": 1,
    "value": "bbla",
    "privacy": 2,
    "type": "Phone"
  },
  {
    "contact_id": 3,
    "value": "blabla",
    "privacy": 2,
    "type": "Company Email"
  },
  {
    "contact_id": 4,
    "value": "blablabla",
    "privacy": 2,
    "type": "Telegram Id"
  }
]

希望对大家有帮助

关于postgresql - 如何使用 postgres 从子查询中获取行的关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792235/

相关文章:

mysql 在选择中选择不同的

mysql - 来自多个子查询 MYSQL 的 View

postgresql - 从 AWS Glue 连接到 Postgres Heroku 数据库,SSL 问题

sql - 如何向该查询添加显示不同行数的列?

mysql - 包含 IP 地址和网络信息的数据库设计

sql - 我如何设计一个像 Stack Overflow 上那样的评论系统?

java - 并发事务的问题

postgresql - 在 SELECT 中包装查询是否可以在 Postgres 中完全保护您

firebase - 如何根据需求查询?

mysql - SQL插入多行,但只执行一次子查询