2017-05-25 3 views
0

ich eine Tabelle, die wie folgt aussieht:Zeilen löschen mit Wiederholungs Spalte Werte

ID VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9 VAR10 
1 2 1 3 5 2 1 3 5 3 1 
2 1 1 1 1 1 1 1 1 1 1 
3 1 3 4 7 2 4 1 3 4 6 
4 2 2 2 2 2 2 2 2 2 2 
5 1 3 5 6 7 4 6 7 4 6 
6 3 3 3 3 3 3 3 3 3 3 

Wie kann ich Zeilen löschen (in diesem Fall ID # 2,4,6), die nicht-unterschiedliche Werte haben, dh die gleiche Anzahl in jeder Spalte , (1,1,1,1,1)?

+0

die Datenbank-Management-System verwenden Sie? – SqlZim

+0

Willkommen bei [Stack Overflow] (http://stackoverflow.com)! Auf dieser Seite wird von Ihnen erwartet, dass Sie versuchen, den Code selbst zu schreiben **. Nach [mehr Forschung] (http://meta.stackoverflow.com/questions/261592), wenn Sie ein Problem haben, können Sie ** posten, was Sie versucht haben ** mit einer ** klaren Erklärung, was nicht funktioniert ** und ein ** [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) **. Ich schlage vor, [wie man eine gute Frage stellt] (http://stackoverflow.com/questions/how-to-ask) zu lesen. Nehmen Sie auch die [Tour] (http://stackoverflow.com/tour) an. – AWinkle

Antwort

2

Wie wäre es ...

DELETE FROM tablename WHERE 
      VAR1=VAR2 
     AND VAR2=VAR3 
     AND VAR3=VAR4 
     AND VAR4=VAR5 
     AND VAR5=VAR6 
     AND VAR6=VAR7 
     AND VAR7=VAR8 
     AND VAR8=VAR9 
     AND VAR9=VAR10 

Hoffentlich müssen Sie diese nur einmal laufen - ich denke, die meisten der Vars werden nicht indiziert werden, so werden Sie die Tabelle oder diese löschen könnte am Ende Sperren . Es wäre besser zu verhindern, dass diese Zeilen eingefügt werden, denke ich.

+0

Gibt es eine Möglichkeit, dies mit einer beliebigen Anzahl von Spalten zu tun? –

+0

Bitte geben Sie weitere Details wie die dbms, die Sie verwenden, und so weiter – Jan

+0

Sie sollten diesen Kommentar auf die Frage stellen, habe ich die Frage nicht gestellt und die Person fragen wird diesen Kommentar nicht sehen –

0

in SQL Server; mit cross apply(values ...) die Spalten entlang dann Aggregat UNPIVOT und Filter mit count(distinct ...)=1:

delete t 
where id in (
    select t.id 
    from t 
    cross apply (values (VAR1),(VAR2),(VAR3),(VAR4),(VAR5),(VAR6),(VAR7),(VAR8),(VAR9),(VAR10) 
    ) u(Var) 
    group by t.id 
    having count(distinct u.var)=1 
) 

rextester Demo: http://rextester.com/WZE91559

kehrt:

+----+------+------+------+------+------+------+------+------+------+-------+ 
| ID | VAR1 | VAR2 | VAR3 | VAR4 | VAR5 | VAR6 | VAR7 | VAR8 | VAR9 | VAR10 | 
+----+------+------+------+------+------+------+------+------+------+-------+ 
| 1 | 2 | 1 | 3 | 5 | 2 | 1 | 3 | 5 | 3 |  1 | 
| 3 | 1 | 3 | 4 | 7 | 2 | 4 | 1 | 3 | 4 |  6 | 
| 5 | 1 | 3 | 5 | 6 | 7 | 4 | 6 | 7 | 4 |  6 | 
+----+------+------+------+------+------+------+------+------+------+-------+ 
+0

Wie ich die andere Person fragte, ist das mit einer beliebigen Anzahl von Spalten möglich? –

+0

@ZacharyWeixelbaum Sie müssten eine klarere Frage stellen. Was sind Ihre Kriterien für möglich, und was genau meinen Sie mit einer beliebigen Anzahl von Spalten? Gewöhnlich sind die Spalten nicht willkürlich, die Anzahl der Zeilen kann ich jedoch als willkürlich verstehen. Damit diese Antwort auf eine andere Gruppe von Spalten angewendet wird, ändern Sie die Liste der Spalten im Tabellenkonstruktor 'values'. - In SQL Server könnten Sie wählen, dies auf eine dynamischere Art und Weise zu schreiben, indem Sie eine festgelegte Methode zum Ermitteln der zu verwendenden Spalten und zum Erstellen einer Abfrage festlegen und diese ausführen (dynamic sql). – SqlZim

Verwandte Themen