Avatar billede inshadow Nybegynder
08. marts 2002 - 11:40 Der er 6 kommentarer

User-variables i where-clause ?

tabel:testdata
id data
1 3
2 1
3 2
4 2

SET @var:=NULL; (Har fundet ud af at det er nødvendigt at initialisere variabler på trods af hvad der står i manualen)

SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
@var2!=data ORDER BY data;

Hvad ville du forvente her?
Jeg ville forvente
2, 1, NULL, NULL, 1
3, 2, 1, 1, 2
1, 3, 2, 2, 3

Men får:
0 rækker.
Avatar billede inshadow Nybegynder
08. marts 2002 - 11:42 #1
Okay... nu fik jeg skrevet en overskrift der ikke lige passer så godt til. :O)
Jeg har også prøvet med WHERE-clausen. Grunden til at den står med HAVING-clause lige nu, er fordi at det er den eneste af de to man kan bruge aliases i... hvilket ikke er brugt i dette eksempel...
Forvirret... jeg bebrejder ikke dig. :)
Avatar billede invisibleman Nybegynder
08. marts 2002 - 11:43 #2
Hmm .. har du prøvet med WHERE ? HAVING er deprecated (udgået, næsten ..)
Avatar billede invisibleman Nybegynder
08. marts 2002 - 11:45 #3
Okay .. nevermind min kommentar ;)
Avatar billede inshadow Nybegynder
08. marts 2002 - 12:30 #4
Øhh... hvorfor er HAVING deprecated? Hvad erstatter den da? Er der ikke ting man ikke kan gøre i WHERE som man kan med HAVING når det gælder GROUP BY's?
Avatar billede inshadow Nybegynder
08. marts 2002 - 18:28 #5
Er der ingen der kommer med en god kommentar?
Er det for svært, eller kan det bare ikke lade sig gøre?
Avatar billede olelj Nybegynder
13. marts 2002 - 12:13 #6
1) ORDER BY sikrer ikke rækkefølgen på din SELECT, men kun rækkefølgen af poster i resultatsættet. Du kan derfor ALDRIG forvente det ønskede.
2) Iflg. MySQL dokumentationen (http://www.mysql.com/doc/V/a/Variables.html) evalueres variabler først ved returnering til klienten, og de kan derfor ikke bruges i GROUP BY, HAVING eller ORDER BY.
3) @var2 er NULL til at starte med, og dermed er @var2!=data altid falsk. Ved at vælge WHERE frem for HAVING (uden ORDER BY!!) giver det stadigt ingen rækker, idet variablene kun sættes hvis rækken vælges - det @var2 der står i WHERE klausulen svarer til @var2 sæt i den sidste valgte række og ikke den række du er ved at vælge.
4) Overvej hvad det er du ønsker og se om du ikke kan skrive det uden brug af variabler. Deres egentlige brug er vel mest til at flytte resultater fra en kommendo til den næste (se igen dokumentationen).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester