【问题标题】:Concat result from join连接的连接结果
【发布时间】:2012-08-21 14:14:59
【问题描述】:

我有以下(有点长)查询:

 SELECT * 
        FROM client C
        JOIN uga U
        ON U.id_uga = C.id_uga
        JOIN appartenance A
        ON A.id_uga = U.id_uga
        JOIN serviceattribuee SA
        ON SA.id_client = C.id_client
        JOIN service S
        ON S.id_service = SA.id_service
        WHERE A.id_utilisateur = 28
        ORDER BY ville_client

这会给我带来类似的东西:

Nom : "Test" 
Adresse : "Test"
Services : "Service 1"

Nom : "Test" 
Adresse : "Test"
Services : "Service 2"


Nom : "Test 2"
Adresse : "Test 2"
Services : "Service 1"

Nom : "Test 2"
Adresse : "Test 2"
Services : "Service 2"

如您所见,结果是重复的,因为每个客户端都有多个服务。 有没有办法将每个客户端的所有服务连接到同一行,以避免双打?

我正在使用 MySQL5.5

谢谢!

【问题讨论】:

  • 你可以,通过 GROUP_CONCAT(),但你最好在客户端这样做。
  • 你想得到什么?
  • 我想获取每个客户端一次,所有服务都在“服务”行中。目前,我为每个客户提供的每项服务多次获得...

标签: mysql sql group-concat


【解决方案1】:
    SELECT c.Nom, c.Adresse, group_Concat(s.Nom) as services
    FROM client C
    JOIN uga U
    ON U.id_uga = C.id_uga
    JOIN appartenance A
    ON A.id_uga = U.id_uga
    JOIN serviceattribuee SA
    ON SA.id_client = C.id_client
    JOIN service S
    ON S.id_service = SA.id_service
    WHERE A.id_utilisateur = 28
    group by c.Nom, c.Adresse

【讨论】:

    【解决方案2】:

    我认为您正在寻找的是带有 GROUP BY 子句的 GROUP_CONCAT。为了很好地使用它,您需要专门枚举要连接的列(我在这里展示了一个示例,您可以根据自己的需要进行调整:

    SELECT 
      C.*
      GROUP_CONCAT(S.Nom) as `services`
    FROM client C
      JOIN uga U
      ON U.id_uga = C.id_uga
      JOIN appartenance A
      ON A.id_uga = U.id_uga
      JOIN serviceattribuee SA
      ON SA.id_client = C.id_client
      JOIN service S
      ON S.id_service = SA.id_service
    WHERE A.id_utilisateur = 28
    GROUP BY C.id
    ORDER BY ville_client
    

    【讨论】:

      【解决方案3】:

      您想对事物进行分组并使用 group_concat:

      select nom, addresse, ville_client,
             group_concat(services separator ', ')
      FROM client C JOIN
           uga U
           ON U.id_uga = C.id_uga JOIN
           appartenance A
           ON A.id_uga = U.id_uga JOIN
           serviceattribuee SA
           ON SA.id_client = C.id_client JOIN
           service S
           ON S.id_service = SA.id_service
      group by nom, addresse, ville_client
      WHERE A.id_utilisateur = 28
      ORDER BY ville_client  
      

      【讨论】:

        猜你喜欢
        • 2012-08-15
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多