【发布时间】:2015-08-10 23:41:50
【问题描述】:
我希望“user_names”是一个用户列表,但我无法将多个子查询项分配给“user_names”。如果子查询只返回 1 项,则它起作用,但如果它返回多个,则不起作用。
床头柜
[编号]
[1]
[2]
[3]
分配表:
[id, bed_id, user_id]
[1,1,1]
[2, 1, 2]
用户表:
[id, '用户名']
[1,“约翰·史密斯”]
[2,“简·多伊”]
sql = "SELECT
b.id,
(
SELECT
u.user_name
FROM
assignments AS a
INNER JOIN
users as u
ON
a.user_id = u.id
WHERE a.bed_id = b.id
) AS user_names
FROM beds AS b"
期望的结果是:
[1,“约翰·史密斯,简·多伊”]
[2, '']
[3, '']
我尝试对床位 ID 进行硬编码并运行此段以获取名称列表。没用:
sql = """
(
SELECT
array_agg(user_name)
FROM
roomchoice_assignment AS a
INNER JOIN
roomchoice_customuser as u
ON
a.user_id = u.id
WHERE
a.bed_id = 1
GROUP BY user_name
)"""
它返回以下内容:
[
[
[
"John Smith"
]
],
[
[
"Jane Doe"
]
]
]
我希望这样:
['John Smith, Jane Doe']
【问题讨论】:
-
为什么不直接从作业中选择用户名?
-
您使用的是哪个数据库?用于连接值的方法不同。很可能有一个重复的问题可以解决您的问题。
-
请使用示例数据和所需结果编辑您的问题。
-
我正在尝试获取分配列表和分配给每个用户的用户列表,因此我认为这是编写查询的最佳方式。数据库是 Postgres。
-
但是基于数组的
group_concat替代方案呢?向我们展示您如何尝试它们以及发生了什么,您可以重新提出您的问题。
标签: sql postgresql subquery concatenation concat