【问题标题】:JOIN three tables + GROUP_CONCAT when there's data + all the rest of the first tableJOIN 三个表 + GROUP_CONCAT 当有数据 + 第一个表的所有其余部分
【发布时间】: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

【问题讨论】:

    标签: mysql sql string subquery aggregate-functions


    【解决方案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)
    猜你喜欢
    • 2012-06-12
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2016-03-15
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多