phpbar.de logo

Mailinglisten-Archive

Bug im HAVING oder falsches Verstaendis?

Bug im HAVING oder falsches Verstaendis?

Jan Kuehl jan.kuehl at software-tomography.com
Don Nov 20 10:58:52 CET 2003


Sebastian Tobias Mendel genannt Mendelsohn schrieb:
>>Ich kann im HAVING auch auf COUNT(XXX) zugreifen, ohne diese im 
>>SELECT-Teil zu haben.
> 
> 
> was auch immer dich das glauben lässt ...
> 
> "The HAVING clause can refer to any column or alias named in the 
> select_expression."
> 
> http://www.mysql.com/doc/en/SELECT.html
> 

Wie unten zu sehen ist, benoetigt man zumindestens fuer COUNT keine 
Angabe im SELECT Teil. Leider habe ich mich dadurch auch auf die 
funktionsweise wie in Sybase verlassen, die diese Einschraenkung nicht hat.
Aber ansonsten hast du Recht. Aufgrund eines Schreibfehlers den ich 
hatte, funktionierte COUNT(DISTINCT s1.k), wohingegen die richtige 
Schreibweise von COUNT(DISTINCT s2.k) mit einer Fehlermeldung abbricht, 
auch wenn man es im SELECT angibt. Die Loesung liegt in der Angabe des 
ALIAS namens.

Danke.


DROP TABLE IF EXISTS du;

CREATE TABLE du (
  sId INT NOT NULL,
  vlId INT NOT NULL,
  k INT NOT NULL,
  PRIMARY KEY (sId, vlId),
  INDEX(sId), INDEX(vlId) );

INSERT INTO du VALUES( 1, 1, 1 ),( 1, 2, 2 ),( 1, 3, 3 ),( 1, 4, 4 ),( 
1, 5, 5 );
INSERT INTO du VALUES( 2, 1, 1 ),( 2, 2, 2 ),( 2, 3, 3 ),( 2, 4, 3 ),( 
2, 5, 3 );
INSERT INTO du VALUES( 3, 1, 3 ),( 3, 2, 4 ),( 3, 3, 4 ),( 3, 4, 4 ),( 
3, 5, 4 );
INSERT INTO du VALUES( 4, 1, 1 );
INSERT INTO du VALUES( 5, 1, 1 ),( 5, 2, 2 );
INSERT INTO du VALUES( 6, 1, 1 ),( 6, 2, 2 ),( 6, 3, 2 );
INSERT INTO du VALUES( 7, 1, 1 ),( 7, 2, 2 ),( 7, 3, 2 ),( 7, 4, 2 ),( 
7, 5, 3 );

## funktioniert
SELECT s1.sId, s1.k
FROM du s1, du s2
WHERE s1.sId = s2.sId
AND s1.k <= s2.k
GROUP BY s1.sId, s1.k
HAVING COUNT(s2.k) < 3

-- 
Software-Tomography - we make the invisible visible!
Jan Kuehl
Software-Tomography GmbH
Karlstr.7
D-03044 Cottbus
e-Mail: jan.kuehl at software-tomography.com
http://www.software-tomography.com
Phone:  +49 (0355) 4945077
----------------------------


-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive