JOIN 三个表 + GROUP_CONCAT 当有数据 + 第一个表的所有其余部分
Posted
技术标签:
【中文标题】JOIN 三个表 + GROUP_CONCAT 当有数据 + 第一个表的所有其余部分【英文标题】:JOIN three tables + GROUP_CONCAT when there's data + all the rest of the first table 【发布时间】:2021-02-05 23:48:05 【问题描述】:这可能很难... 三张桌子
我想检索星舰数据列表 + 船员(组连接)+ 没有团队的其余星船记录。
此代码将每行一个团队成员返还星际飞船...
SELECT
ss.starship_id, ss.starship_name, ss.starship_quota, ss.quota_insert_date as lastupd,
u.nome, u.cognome
FROM starship as ss
LEFT JOIN user_props as up
ON ss.starship_id=up.starship_id
LEFT JOIN users as u
ON u.id_user=up.id_user
这是样本数据:
id name quota name surname
------------------------------------------------------
23 HAS CREW 7923 Luke Skywalker
23 HAS CREW 7923 PAdme Amidala
------------------------------------------------------
24 UnALTRA 0 Bilbo Baggins
24 UnALTRA 0 Frodo Baggins
------------------------------------------------------
22 NO CREW 3552 NULL NULL
column "lastupd" have been omitted
我想要的只是一个具有串联成员的“团队”记录,或者当没有团队在星际飞船上时为空。 请参阅下面的示例表:
id name quota TEAM
------------------------------------------------------
23 HAS CREW 7923 Luke Skywalker, Padme Amidala
------------------------------------------------------
24 UnALTRA 0 BilBo Baggins, Frodo Baggins
------------------------------------------------------
22 NO CREW 3552 NULL
【问题讨论】:
【参考方案1】:我会为此使用相关子查询:
select s.*,
(
select group_concat(u.nome, ' ', u.cognome)
from user_props up
inner join users u on u.id_user = up.id_user
where up.starship_id = s.starship_id
) team
from starship s
【讨论】:
您缺少姓氏 GROUP_CONCAT(u.nome,' ', u.cognome)以上是关于JOIN 三个表 + GROUP_CONCAT 当有数据 + 第一个表的所有其余部分的主要内容,如果未能解决你的问题,请参考以下文章
JOIN 三个表 + GROUP_CONCAT 当有数据 + 第一个表的所有其余部分
MySQL UPDATE 与 GROUP_CONCAT 加入三个表
使用 GROUP_CONCAT 进行 LEFT JOIN 的奇怪结果