Bjarne Damsgaard skrev:
> SELECT BogID, BogNavn
> FROM Bøger
> WHERE NOT EXISTS
> (SELECT * FROM Lånere, Udlån
> WHERE LånerNavn = 'Bjarne'
> AND LID = LånerID
> AND BID = BogID)
>
> der også ser ud til at virke. Er INNER JOIN sætningen mere
> effektiv end min newbie-løsning?
Så vidt jeg husker er der ikke i praksis forskel på at lave et join
eksplicit:
SELECT <felter>
FROM foo INNER JOIN bar
ON foo.barID = bar.barID
- og det samme join implicit:
SELECT <felter>
FROM foo, bar
WHERE foo.barID = bar.barID
Jeg foretrækker afgjort at skrive et eksplicit join, fordi det i
mine øjne er lettere at se hvordan de enkelte tabeller kædes
sammen. Hvis man har kriterier der ikke hører til sammenkædningen
(i ovenstående fx bar.Navn = 'Baz') vil de med et implicit join
være blandet sammen med join-kriterierne, mens det med et eksplicit
join er tydeligt hvilke kriterier der vedrører sammenkædningen af
tabeller og hvilke der ikke gør.
Noget der til gengæld nok har en negativ betydning mht.
effektivitet i dit eksempel er at du bruger "SELECT *". En EXISTS-
forespørgsels eneste formål er at være enten tom eller ikke-tom.
Ved at inkludere alle felter beder du databasen om at hente en
masse data der ikke er brug for. Skriv fx "SELECT True", "SELECT 1"
eller SELECT 'x' i stedet for (NB: True/False findes ikke i MSSQL,
derfor var mit eksempel SELECT 't').
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på
http://usenet.dk/netikette/citatteknik.html