簡體   English   中英

使用group_concat和join重復的值

[英]repeated values with group_concat and joins

我對以下查詢有一點問題。 它返回多個值。

這是我收到的結果:

+----+--------------+--------+--------+---------------------+----------+------------------+
| id | company      | county | vm     | os                  | products | sn               |
+----+--------------+--------+--------+---------------------+----------+------------------+
| 1  | ABC Corp     | USA    | VMW    | Linux, Linux, Linux | 3        | A123, B234, A343 |
| 2  | DEF Corp     | USA    | CIT    | Windows             | 1        | I223             |
+----+--------------+--------+--------+---------------------+----------+------------------+

如您所見,第一行顯示3次Linux,但這應該只列出一次。 我已經看到只有在客戶擁有多個產品的情況下才會出現此問題。 我想我必須對我的查詢或類似的東西進行分組,但我不知道如何。

這是我的查詢:

SELECT
    customer.id,
    customer.company,
    countries.en AS country,
    vmenv.name AS vm,
    GROUP_CONCAT(operatingsystems.name SEPARATOR ', ') AS os,
    COUNT(device2customer.sn) AS products,
    GROUP_CONCAT(device2customer.sn SEPARATOR ', ') AS sn
FROM
    customer

LEFT JOIN
    countries
ON
    customer.country = countries.id

LEFT JOIN
    vmenv2kunden
ON
    vmenv2kunden.customerid = customer.id

LEFT JOIN
    vmenv
ON
    vmenv2kunden.vmenvnr = vmenv.id

LEFT JOIN
    operatingsystems2customer
ON
    operatingsystems2customer.customerid = customer.id

LEFT JOIN
    operatingsystems
ON
    operatingsystems2customer.osnr = operatingsystems.id

LEFT JOIN
    device2customer
ON
    device2customer.kundenid = customer.id

GROUP BY
    customer.id

在您的查詢中,將group_concat語句更改為

GROUP_CONCAT(DISTINCT operatingsystems.name SEPARATOR ', ') AS os,
COUNT(DISTINCT device2customer.sn) AS products,
GROUP_CONCAT(DISTINCT device2customer.sn SEPARATOR ', ') AS sn

通過添加DISTINCT關鍵字,它應該對您有用

你只需要使用喲distinctGroup_concat

請嘗試以下更新的查詢。

SELECT
    customer.id,
    customer.company,
    countries.en AS country,
    vmenv.name AS vm,
    GROUP_CONCAT(distinct operatingsystems.name SEPARATOR ', ') AS os,
    COUNT(device2customer.sn) AS products,
    GROUP_CONCAT(device2customer.sn SEPARATOR ', ') AS sn
FROM
    customer

LEFT JOIN
    countries
ON
    customer.country = countries.id

LEFT JOIN
    vmenv2kunden
ON
    vmenv2kunden.customerid = customer.id

LEFT JOIN
    vmenv
ON
    vmenv2kunden.vmenvnr = vmenv.id

LEFT JOIN
    operatingsystems2customer
ON
    operatingsystems2customer.customerid = customer.id

LEFT JOIN
    operatingsystems
ON
    operatingsystems2customer.osnr = operatingsystems.id

LEFT JOIN
    device2customer
ON
    device2customer.kundenid = customer.id

GROUP BY
    customer.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM