2016-07-06 18 views
0

この質問は2年前に質問されましたが、解決策はgroup_concatを使用しませんでした。その次選択された行mysql group_concatを削除する

select name, count(*) c, group_concat(id) rows 
    from table 
group by name 
having c > 1; 

を実行すると

name c rows 
Bob 2 3,7 
Joe 2 4,8 

を与えるテーブル

id name 
1  Tim 
2  Sam 
3  Bob 
4  Joe 
5  Ali 
6  Kay 
7  Bob 
8  Joe 

を与え、それが短く、維持することは、その後なしに私のテーブルから行3,7,4および8を除去することが可能ですスクリプトを書く?私は実際には私の "名前"列がテーブルの3つの列の連結であるので、私はgroup_concatを使う必要があると思う。

+1

なぜ使用 'のために再び再び参加し、連結削除してみてくださいGROUP_CONCAT() 'はまったくですか? 'DELETE t1 FROM table t1 NATURAL JOIN(名前をSELECT GROUP BYの名前にする(*)> 1)t2'を選択するだけです。 – eggyal

+0

これは私にいくつかのアイデアをくれてありがとう、私は結局同様の探しているクエリで短いスクリプトを使ってIDを選択しました。私はgroup_concatを削除せずに削除したいのですが、それぞれを削除しました。 – nak3c

答えて

0

あなたが重複する行を削除したい場合は、この

DELETE from table where id NOT IN (select id from table GROUP BY name having count(*) = 1) 

が一意でないすべての行

0
SELECT count(`access`.id) as 
extra_access,`access`.perm_role_id,group_concat(temp.extra_id) as extra_ids 
FROM `access` 
INNER JOIN( 
SELECT `access`.id,perm_role_id,perm_module_id,group_concat(id) as extra_id 
FROM `access` 
GROUP BY perm_role_id,perm_module_id  
HAVING COUNT(id) =1 
)temp ON access.id= temp.id GROUP BY perm_role_id 

用途この