Subquery (SQL Server 2000)

Databaser & SQL

3 svar · 374 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Trådstart#1

Hej! Jag undrar var SQL:en nedan inte returnerar några rader.
Jag har en tabell med konsulter (Tconsultant). För varje lån i TLoan finns en konsult angiven. I

Nu vill jag visa de konsulter som finns i TConsultant, men inte finns i TLoan.

select * from TConsultant where ConsultantID NOT IN (SELECT Distinct ConsultantID FROM TLoan)

Jag vet att det finns tre konsulter som inte finns i TLoan. Dock får jag inga träffar. Varför?

obs! Jag vet att det finns andra sätt att lösa problemet, men jag vill förstå hur subqueryn och IN fungerar syntaktiskt.

Medlem sedan dec. 200012 464 inlägg
#2

Att ange distinct är helt onödigt och leder eventuellt till en prestandaförsämring.
En anledning till att du inte får träff är att det kan finnas ConsultantID som är null.

Medlem sedan feb. 20013 023 inlägg
#3

LarsG är grym!
Visst fanns det NULL-värden. När jag tog bort dem, fungerade det. Jag är dock inte säker på att jag fattar varför SQL funkar så. Finns det någon naturlig förklaring?

Tack för tipset om distinct också, det ska jag komma ihåg.

Medlem sedan dec. 200012 464 inlägg
#4

En jämförelse (oavsett operator (= <>, etc)) med något som är null är aldrig sann.

252 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)