我希望“user_names”是一个用户列表,但我不能将多个子查询项分配给“user_names”。如果子查询只返回1项,则有效,但如果返回多项,则无效。
床上桌
[ID]
[1]第一章
[二]《中国日报》
[3]第一章
分配表:
[id,bed_id,user_id]
【一、一、一】
[二、一、二]
用户表:
[id,'user_name']
[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']
型
1条答案
按热度按时间avkwfej41#
这个查询的一个问题是,你是按照你应用array_agg的列进行分组的。如果你删除group by,你会得到
"{"John Smith","Jane Doe"}"
,但是你仍然会丢失bed id列,如果你想要所有bed的列表,即使没有赋值,你应该使用左连接而不是子查询(这也应该更好地提高性能和可读性)。您可以使用
string_agg
,如重复问题所示。此查询:
字符串
会给你一个给予这样的结果:
型