MySQL group_concat с 2 соединениями возвращает нежелательные результаты - PullRequest
0 голосов
/ 05 ноября 2010

При выполнении этого запроса я ожидаю, что получу 2 мобильных номера и 1 категорию, вместо этого я получу 2 категории, что я делаю неправильно?Я полагаю, это связано с тем, как я присоединяюсь?

Пользователь, может иметь несколько imei, categoryjoin связывает пользователя с несколькими категориями

SELECT 
    u.*, 
    group_concat(i.mobilenumber) as mobilenumbers,
    group_concat(c.name) as categories 
FROM 
    users AS u 
INNER JOIN 
    categoryjoin AS cj 
ON 
    u.uid = cj.user_id 
INNER JOIN 
    categories AS c 
ON 
    cj.category_id = c.uid 
INNER JOIN 
    imei AS i 
ON
    u.uid = i.user_id
GROUP BY 
    u.uid

Большое спасибо за вашепомощь!

1 Ответ

2 голосов
/ 05 ноября 2010

Если пользователь соответствует одной категории, но соответствует 2 строкам в imei, то категория будет продублирована в наборе результатов. Вы можете избавиться от избыточных значений из group_concat, используя DISTINCT:

SELECT 
    u.*, 
    group_concat(distinct i.mobilenumber) as mobilenumbers,
    group_concat(distinct c.name) as categories 
...