0

次のクエリに少し問題があります。複数の値を返します。

これが私が受け取っている結果です:

+----+--------------+--------+--------+---------------------+----------+------------------+
| 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             |
+----+--------------+--------+--------+---------------------+----------+------------------+

ご覧のとおり、最初の行には Linux が 3 回表示されていますが、これは 1 回だけ表示されているはずです。この問題は、顧客が複数の製品を持っている場合にのみ発生することがわかっています。クエリなどをグループ化する必要があると思いますが、方法がわかりません。

ここに私のクエリがあります:

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
4

2 に答える 2

2

クエリで、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 キーワードを追加すると、うまくいくはずです

于 2013-08-27T09:36:42.957 に答える
1

distinctで使用するだけですGroup_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
于 2013-08-27T09:34:36.913 に答える