Avatar billede elskermad.dk Nybegynder
17. november 2008 - 16:37 Der er 6 kommentarer og
1 løsning

Kun vis række, hvis id ikke optræder i anden tabel

Hej Eksperter!

Jeg har en lidt større sql-sætning som jeg ikke helt kan få til at lykkedes, den er som følger:

SELECT
    a.id,a.produkt,a.start,a.slut,a.bud_nu,a.bud_antal,p.navn,p.url,p.teaser
FROM auk_auktion a
    LEFT JOIN auk_produkt p ON p.id = a.produkt
    LEFT JOIN auk_produkt_kat pk ON p.id = pk.produkt
    LEFT JOIN auk_auktion_bud ab ON ab.auktion = a.id
WHERE
    a.status = 2
    AND pk.kat = '1'
    AND ab.kunde = '3'
    AND ab.bud = (SELECT MAX(bud) FROM auk_auktion_bud ab2 WHERE ab2.auktion = a.id GROUP BY ab2.id ORDER BY bud DESC LIMIT 0,1)
    AND (SELECT id FROM auk_auktion_vinder av WHERE av.auktion = a.id LIMIT 0,1) IS NULL
    AND pk.kat = '1'
GROUP BY a.id
ORDER BY a.slut ASC LIMIT 0,40

Mit problem ligger i denne linie:
"AND (SELECT id FROM auk_auktion_vinder av WHERE av.auktion = a.id LIMIT 0,1) IS NULL"

Det skal gøre således at hvis a.id er i tabellen auk_auktion_vinder i kolonnen av.auktion så skal den IKKE vise posten. Problemet er at den lige meget hvad ikke viser posten når denne linie er med, ellers fungerer sætningen rigtigt.

Jeg går ud fra at man ikke kan sige IS NULL på en "indskudt" forespørgsel som jeg gør?

Håber der er nogen seje hajer derude :)

På forhånd tak!
Avatar billede hmortensen Nybegynder
17. november 2008 - 16:43 #1
Måske:

AND a.id NOT IN (SELECT id FROM auk_auktion_vinder)
Avatar billede arne_v Ekspert
17. november 2008 - 16:47 #2
eller:

NOT EXISTS (SELECT ...)
Avatar billede elskermad.dk Nybegynder
17. november 2008 - 16:47 #3
det lød meget logisk egentlig, men det giver desværre ingen filtrering, nu vises begge resultater selvom én af dem er repræsenteret i vinder-tabellen
Avatar billede elskermad.dk Nybegynder
17. november 2008 - 16:49 #4
arnes virker: "AND NOT EXISTS (SELECT av.id FROM auk_auktion_vinder av WHERE av.auktion = a.id)"

Super, mange tak - smid et svar :)
Avatar billede arne_v Ekspert
17. november 2008 - 17:10 #5
svar
Avatar billede elskermad.dk Nybegynder
18. november 2008 - 12:38 #6
gør det iøvrigt databasen "tungere" at man joiner en masse? eller er der ikke så meget forskel svartidsmæssigt?
Avatar billede arne_v Ekspert
18. november 2008 - 14:40 #7
Hvis der er de rigtige index, saa er join ikke saa dyrt, men det koster lidt.
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