phpbar.de logo

Mailinglisten-Archive

DISTINCT verstecken?

DISTINCT verstecken?

Andreas Müller mysql at universalware.de
Fre Jan 6 15:48:04 CET 2006


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