2013-08-17 39 views
15

1つのグループに属する文字列を連結するクエリがあります。GROUP_CONCATの重複を避けるにはどうすればよいですか?

SELECT e.id, 
     ke.value, 
     re.value AS re_value, 
     GROUP_CONCAT(g.value,', ') 
     FROM entry e 
       INNER JOIN k_ele ke ON e.id = ke.fk 
       INNER JOIN r_ele re ON e.id = re.fk 
       INNER JOIN sense s ON e.id = s.fk 
       INNER JOIN gloss g ON s.id = g.fk 
WHERE g.lang IS NULL 
GROUP BY s.id 
ORDER BY re_value 

しかし

GROUP_CONCAT(g.value、 '')

は、この結果を与えています。あなたが見ることができるように

愛情関係、愛情関係、愛情関係、愛情関係、愛情、関係を愛する関係を愛し、関係を愛する関係

連結の重複があります。どのように連結の重複を避けるために?

答えて

23
GROUP_CONCAT(DISTINCT g.value) 
+5

が、 'GROUP_CONCAT(SQLiteのでDISTINCT'を、使用しているときに区切り文字を指定することはできません区切り文字をデフォルトの ''から変更したい場合は、CLの答えに表示されているようにサブクエリの手法を使用するか、置換を使用する必要があります(サブクエリ手法がはるかに優れていると思います)。 – GarethD

+4

私は '' 'replace(GROUP_CONCAT(DISTINCT g.value)、 '、'、the_delimiter)' ''と一緒に行った。それはひどいですが、他の区切り文字とサブクエリが困難になる非常に大きなクエリに悩まされている場合は、これに対処する簡単な方法です。これが機能するには、値にカンマが含まれていないことが肯定的でなければなりません。 – Kelly

+0

大規模なデータの場合は、サブクエリを実行するのが適切です。この場合、Distinctはちょうどハックになります。 –

2

あなたは通常、サブクエリを必要とGROUP_CONCATを適用する前に重複を削除する必要があります。この作品

SELECT a, GROUP_CONCAT(b) 
FROM (SELECT DISTINCT a, b 
     FROM MyTable) 
GROUP BY a 
関連する問題