09. oktober 2006 - 11:40Der er
3 kommentarer og 1 løsning
Hjælp til select statement
Jeg har en statement:
select TabelB.objectid from TabelB, TabelF, TabelS where TabelB.kompunderfeltobjektid = TabelF.objectid and TabelB.KNUDEKLASSENAVN = 'Data' and TabelB.kompunderknudeobjektid = TabelS.objectid
Den giver ca. 2000 værdier tilbage, men jeg er egentlig mere interesseret i hvilke værdier af TabelB, som ikke opfylder kravet i sidste linie, men hvis jeg skriver:
select TabelB.objectid from TabelB, TabelF, TabelS where TabelB.kompunderfeltobjektid = TabelF.objectid and TabelB.KNUDEKLASSENAVN = 'Data' and TabelB.kompunderknudeobjektid != TabelS.objectid
får jeg 145.011.432.321 retur.
Er det mulig at lave en forspørgsel på formen:
Select * from TabelB where TabelB.ObjectID is not in(select TabelB.objectid from TabelB, TabelF, TabelS where TabelB.kompunderfeltobjektid = TabelF.objectid and TabelB.KNUDEKLASSENAVN = 'Data' and TabelB.kompunderknudeobjektid = TabelS.objectid)
Den første kan også skrives sådan her (efter min mening lidt mere overskueligt):
SELECT TabelB.objectid FROM TabelB JOIN TabelF ON TabelB.kompunderfeltobjektid = TabelF.objectid JOIN TabelS ON TabelB.kompunderknudeobjektid = TabelS.objectid WHERE TabelB.KNUDEKLASSENAVN = 'Data'
Hvis du gerne vil vide hvilke poster i TabelB JOINet med TabelF, som ikke findes i TabelS, så vil jeg tro det kan gøres sådan her:
SELECT TabelB.objectid FROM TabelB JOIN TabelF ON TabelB.kompunderfeltobjektid = TabelF.objectid WHERE TabelB.KNUDEKLASSENAVN = 'Data' AND TabelB.kompunderknudeobjektid NOT IN (SELECT TabelS.objectid FROM TabelS)
SELECT TabelB.* FROM TabelB INNER JOIN TabelF ON TabelB.kompunderfeltobjektid = TabelF.objectid LEFT OUTER JOIN TabelS ON TabelB.kompunderknudeobjektid = TabelS.objectid WHERE TabelB.KNUDEKLASSENAVN = 'Data' AND TabelS.objectid IS NULL
Ved at filtrere på konditionen TabelS.objectid IS NULL pilles de rækker fra, hvor der ikke findes en relation til TabelS.
Jeg vil dog også tro, at den løsning pierrehusted kom med vil virke. Men jeg er altid lidt tilbageholdende med at bruge en subselect, hvis det kan undgås. Brugen af dem plejer ikke ligefrem at øge hastigheden.
Jeg overvejede også en LEFT JOIN. Men en eller anden detalje i først indlæg (kan ikke huske hvad) fik mig til at skifte mening.
Synes godt om
Ny brugerNybegynder
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.