Avatar billede trumf Nybegynder
22. februar 2004 - 20:05 Der er 7 kommentarer og
1 løsning

problem med et sql kald

Hejsa eksperter

Jeg sidder lige og skal have lavet en sql om, for jeg kan ikke bruge select IN i mysql

Det jeg vil lave er:
SELECT f.*, v.* FROM favoritter f, vin v WHERE f.vinID = v.vinID AND f.brugerID = " & brugerID & " AND f.vinID NOT IN (SELECT vinID FROM karakterer WHERE brugerID = " & brugerID & ")"

altså at jeg vil hente alle favoritter, som ikke også findes i karakterer.

Hvordan kan jeg skrive den om, så det bliver med JOINS i stedet for select IN ?
Avatar billede eagleeye Praktikant
22. februar 2004 - 21:58 #1
Prøv sådan her:

SELECT f.*, v.* FROM (favoritter f LEFT JOIN vin v ON f.vinID = v.vinID) LEFT JOIN karakterer ON f.vinID = karakterer.vinID WHERE f.brugerID = " & brugerID & " AND karakterer.vinID is NULL;"

med udgangspunkt i:
http://www.mysql.com/doc/en/Rewriting_subqueries.html
Avatar billede trumf Nybegynder
22. februar 2004 - 22:27 #2
ja, det var rigtigt svaret, men jeg fik sat en forkert sql ind. gider du prøve med en anden sql i stedet.

SELECT k.*, v.* FROM karakterer k, vin v, favoritter f WHERE k.brugerID = " & brugerID & " AND k.godkendt = 'on' AND k.karakter > 5 AND k.vinID = v.vinID AND f.vinID NOT IN (SELECT vinID FROM karakterer WHERE brugerID = " & brugerID & ") ORDER BY k.karakter DESC
Avatar billede eagleeye Praktikant
22. februar 2004 - 22:39 #3
Prøv sådan her så:

SELECT k.*, v.* FROM (favoritter f LEFT JOIN vin v ON f.vinID = v.vinID) LEFT JOIN karakterer k ON f.vinID = k.vinID WHERE k.brugerID = " & brugerID & " AND k.godkendt = 'on' AND k.karakter > 5 AND k.vinID is NULL ORDER BY k.karakter DESC


Men umiddelbart behøver du ikke tabellen favoritter:

SELECT k.*, v.* FROM karakter k LEFT JOIN vin v ON k.vinID = v.vinID WHERE k.brugerID = " & brugerID & " AND k.godkendt = 'on' AND k.karakter > 5 ORDER BY k.karakter DESC
Avatar billede trumf Nybegynder
22. februar 2004 - 22:40 #4
Jeg lavede lige denne her i stedet
SELECT k.*, v.* FROM (karakterer k LEFT JOIN vin v ON k.vinID = v.vinID) LEFT JOIN favoritter f ON f.vinID = k.vinID WHERE k.brugerID = " & brugerID & " AND k.godkendt = 'on' AND k.karakter > 5 AND f.vinID is NULL ORDER BY k.karakter DESC

Det virker umiddelbart, ser det ikke rigtigt ud ?
Avatar billede eagleeye Praktikant
22. februar 2004 - 22:43 #5
Jo den ser rigtig ud, men får du det du forvendter? det er vel kun dig der kan svare på det :))
Avatar billede trumf Nybegynder
22. februar 2004 - 22:45 #6
Så mangler jeg bare et svar :-)
Avatar billede eagleeye Praktikant
22. februar 2004 - 22:45 #7
Ok :)
Avatar billede trumf Nybegynder
22. februar 2004 - 22:52 #8
Takker ;-)
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
Kurser inden for grundlæggende programmering

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