Group by in select, aber nicht in delete?! |
cll

Hafifan in Action ->www.hafifieber.com
 

Dabei seit: 12.02.2005
Beiträge: 1.887
Herkunft: Bayern
 |
|
Group by in select, aber nicht in delete?! |
 |
Ich habe folgendes SQL-Statement:
SELECT * FROM ZGs GROUP BY zg Having count(zg)=1
(ruft alle zeilen ab, bei denen nur ein user in einer Gruppe (zg) ist)
Nun will ich aber genau diese Einträge löschen! Wenn ich anstatt "select *" ein delete schreibe wird aber das group by nicht mehr akzeptiert -> ich kann nicht mehr zählen wieviele user es pro Gruppe gibt
Wie umgehe ich das am Besten?
__________________
|
|
15.10.2009 11:59 |
|
|
1Sm!le

Mitglied
 

Dabei seit: 05.03.2005
Beiträge: 441
Herkunft: Berlin
 |
|
GROUP BY wird zum Gruppieren nach Zeilen genutzt. Das ist eine völlig legitime Variante.
Da aber GROUP BY und HAVING von MySQL erst sehr spät in der internen Abarbeitung ausgeführt werden - nachdem schon alle Ergebnisse beisammen sind - empfehle ich für diese Art Abfrage auch ein WHERE, das ist MySQL-intern sinnvoller. Es bedeutet nämlich: Hole (SELECT) alle Zeilen, die die Bedingung WHERE erfülllen.
Bei dir läuft hingegeben ab: Beim SELECT wird erst selektiert und die Ergebniszeilen dann gruppiert und nach der HAVING-Bedingung noch mal aussortiert.
DELETE akzeptiert aber keine Gruppierung, das macht auch keinen Sinn: Beim DELETE müsste er erst alle löschen und dann gruppieren - das geht inhaltlich nicht. Deshalb: Wechsle auf WHERE-Bedingung.
__________________
|
|
15.10.2009 14:55 |
|
|
cll

Hafifan in Action ->www.hafifieber.com
 

Dabei seit: 12.02.2005
Beiträge: 1.887
Herkunft: Bayern
Themenstarter
 |
|
aber wie kann ich im WHERE ausdrücken dass ich alle möchte bei denen der Wert in "zg" einmalig ist?
__________________
|
|
15.10.2009 16:13 |
|
|
cll

Hafifan in Action ->www.hafifieber.com
 

Dabei seit: 12.02.2005
Beiträge: 1.887
Herkunft: Bayern
Themenstarter
 |
|
jetzt weiß ich zumindest den Anfang der Abfrage:
SELECT * FROM ZGs USING ZGs z, ZGs v WHERE ...
aber dann weiß ich schon wieder nicht so wirklich weiter.
Ich denke jetzt mal das ist wie ein join, also
WHERE z.zg=v.zg AND z.user!=v.user
kombiniert alle mit gleicher Spalte "zg" miteinander, bei denen die Spalte "user" unterschiedlich ist.
Weiß jemand ob meine Annahme stimmt dass er mit "AND v.user IS NULL" dann nur die Zeilen auswählt, in denen kein Partner gefunden wurde?
also komplett:
SELECT * FROM ZGs USING ZGs z, ZGs v WHERE z.zg=v.zg AND z.user!=v.user AND v.user IS NULL
wenn nicht, helft mir bitte! LG
__________________
|
|
17.10.2009 11:28 |
|
|
|
Impressum
|