2012-02-28 96 views
2

我試圖將幾個字段連接成一個字段,但只保留結果字符串中的唯一值。mysql concat_ws沒有重複

實施例:

title_orig | title_fr | title_de    | title_it 
--------------------------------------------------------------------- 
KANDAHAR | KANDAHAR | REISE NACH KANDAHAR  | VIAGGO A KANDAHAR 
SCREAM 2 | SCREAM 2 | SCREAM 2    | SCREAM 2 

隨着CONCAT_WS(', ', title_orig, title_fr, title_de, title_it) AS titles我會得到

titles 
------------------------------------------------------------ 
KANDAHAR, KANDAHAR, REISE NACH KANDAHAR, VIAGGO A KANDAHAR 
SCREAM 2, SCREAM 2, SCREAM 2, SCREAM 2 

但我想獲得

titles 
------------------------------------------------ 
KANDAHAR, REISE NACH KANDAHAR, VIAGGO A KANDAHAR 
SCREAM 2 

在PostgreSQL,我使用的plperl存儲過程(%seen=(); return join(", ", grep {$_ && ! $seen{$_}++} @_) 。

我怎樣才能擺脫MySQL中的重複?

回答

1

需要一些工作:

SELECT 
    CONCAT(
    title_orig, 
    IF(title_fr=title_orig,'',CONCAT(', ',title_fr)), 
    IF(title_de=title_orig OR title_de=title_fr,'',CONCAT(', ',title_de)), 
    IF(title_it=title_orig OR title_it=title_fr OR title_it=title_de,'',CONCAT(', ',title_it)) 
) AS title_concat 
FROM 
    ... 
0

有使用group_concat()的替代解決方案,但它也非常麻煩。

SELECT id, group_concat(
    DISTINCT titles 
    ORDER BY titles 
    SEPARATOR ', ') 
FROM (
    SELECT id, title_orig AS titles FROM test 
    UNION ALL SELECT id, title_fr FROM test 
    UNION ALL SELECT id, title_de FROM test 
    UNION ALL SELECT id, title_it FROM test 
) AS tmp 
GROUP BY id;