webForumDet fria alternativet

Subquery (SQL Server 2000)

3 svar · 370 visningar · startad av clarkbones

clarkbonesMedlem sedan feb. 20012 693 inlägg
#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.

LarsGMedlem sedan dec. 200012 465 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.

clarkbonesMedlem sedan feb. 20012 693 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.

LarsGMedlem sedan dec. 200012 465 inlägg
#4

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

Genererad på 486 ms · cache AV · v20260730165559-full.f96bc7eb