【问题标题】:Selecting two tables at the same time同时选择两个表
【发布时间】:2019-10-30 23:14:56
【问题描述】:

我有 usersuser_groups 表,如下所示:

用户

id - PK
name
timestamp

用户组

user_1 - Foreign key to users id
user_2 - Foreign key to users id
user_3 - Foreign key to users id
type

我有一个 id = 1 的用户。我想选择这个用户加入的所有组,组成员的名称用户组的类型。我可以只用一个查询来做到这一点吗?实现这一目标的最佳方法是什么?

样本数据

用户

id - 1
name - Jeff

id - 2
name - Mehmet

id - 3
name - Walter

用户组

user_1 - 1
user_2 - 2
user_3 - null
type - 1

user_1 - 1
user_2 - 2
user_3 - 3
type - 1

user_1 - 1
user_2 - 3
user_3 - null
type - 2

输出应该如何:

[{
type: 1,
name: ["Jeff", "Mehmet"]
},

{
type: 1,
name: ["Jeff","Mehmet","Walter"]
},

{
type: 2,
name: ["Jeff", "Mehmet"]
}]

【问题讨论】:

  • 是的,这就是连接的全部思想:您在一个查询中将两个表连接在一起。在这种情况下,您希望从 user_groups 表中选择类型和名称,将 user_group 名称连接到用户的表名称列。
  • 你不是已经问过这个了吗? stackoverflow.com/questions/58605103

标签: sql database postgresql


【解决方案1】:

您需要多个连接和一些数组功能:

select ug.type,
       array_remove(array[u1.name, u2.name, u3.name], null)
from user_groups ug left join
     users u1
     on ug.user_1 = u1.id left join
     users u2
     on ug.user_2 = u2.id left join
     users u3
     on ug.user_3 = u3.id;

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2014-01-28
    相关资源
    最近更新 更多