2016-07-06 20 views
0

Obwohl diese Frage vor zwei Jahren gestellt wurde, haben die Lösungen group_concat nicht verwendet. so halten esremove mysql group_concat ausgewählte Zeilen

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

laufen folgende

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

gibt

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

ist möglich, eine Tabelle kurz ist, um dann Reihen 3,7,4 und 8 aus meinem Tisch zu entfernen, ohne ein Skript schreiben? Ich denke, ich brauche group_concat, weil in Wirklichkeit meine "Name" -Spalte eine Verkettung von drei Spalten in der Tabelle ist.

+1

Warum Gebrauch ' GROUP_CONCAT() 'überhaupt? Verwenden Sie einfach einen Join: 'DELETE t1 FROM Tabelle t1 NATURAL JOIN (SELECT Name FROM Tabelle GROUP BY Name HAVING COUNT (*)> 1) t2'? – eggyal

+0

danke das gab mir ein paar Ideen, ich benutzte schließlich kurze Skript mit einer ähnlich aussehenden Abfrage, um die IDs zu wählen, die ich ohne group_concat löschen wollte und löschte jede. – nak3c

Antwort

0

Wenn Sie die doppelte Zeile entfernen möchten, versuchen Sie diese

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

alle Zeilen löschen, die nicht eindeutig sind

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 

Verwendung kommen wieder und concat wieder für dieses