webForumDet fria alternativet

Subquery (SQL Server 2000)

Databaser & SQLur Databashanterare & SQL

3 svar · 370 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Frågan#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.

124 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)