Mailinglisten-Archive |
Hallo Gerd, also auf deinen Fall bezogen tut DISTINCT und GROUP BY das gleiche. Allgemein hat GROUP BY den Vorteil das man noch Aggregatfunktionen auf anderen Spalten verwenden kann und so z.B. die Anzahl der "gleichen" Zeilen ermitteln kann: SELECT a,count(a) FROM table GROUP BY a -> liefert eine distincte (frei von gleichen Zeilen) Liste und die Anzahl wie oft jedes a SELECT DISTINCT a FROM table bzw. SELECT a FROM table GROUP BY a -> liefert nur die distincte Liste ohne die Möglichkeit die Anzahl zu ermitteln Die Ausführungsgeschwindigkeit beider Abfragen kann sehr stark von einander abweichen. Das liegt in der Art wie der Optimizer so eine Abfrage optimieren kann. So gibt es bei MS-SQL und Oracle zum teil erhebliche Laufzeitunterschiede. So und in deinem Fall: SELECT DISTINCT c_artikel.id, c_artikel.titel, c_artikel.kurz, c_artikel.reldate FROM c_artikel WHERE 1 Bedeutet das die c_artikel.id mit einbezogen werden soll in das DISTINCT. Würde man die Abfrage so schreiben: SELECT DISTINCT c_artikel.titel, c_artikel.kurz, c_artikel.reldate FROM c_artikel WHERE 1 dann wäre die c_artikel.id nicht mehr drin, und ich denke es würde in der Praxis keinen Unterschied machen - ABER: Gibt es nun Zufällig unterschiedliche Artikel (unterschiedliche c_artikel.id) aber mit gleichen "restspalten" dann würden diese zusammengefasst - was also nicht korrekt wäre. Ein SELECT c_artikel.titel, c_artikel.kurz, c_artikel.reldate FROM c_artikel WHERE 1 GROUP BY c_artikel.id verlagert die gruppierung einfach aus dem SELECT Bereich heraus - und arbeitet korrekt. Gruß, Andreas -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive