webForumDet fria alternativet

Konstigt problem med villkor

Databaser & SQL

7 svar · 538 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Frågan#1

Har ett mystiskt fel på en SQL fråga.
Databasen är Access 2003.

Villkoret

WHERE r.ref_hardware = 7 AND (f.engine = '' OR f.engine = 'Diesel')

returnerar bara dom rader där engine är Diesel, inte några där engine saknar värde.

Samma villkor, men på en annat fält

WHERE r.ref_hardware = 7 AND (f.rpm = '' OR f.rpm = 'VRPM')

returnerar både tomma fält och där värdet är VRPM.

Båda fälten i databasen är av samma data typ mm.

Fattar inte varför jag får olika resultat. Men förhoppningsvis förstår någon av er varför.

Medlem sedan aug. 20039 340 inlägg
#2

Kanske en uppenbar fråga, men är du säker på att et finns rader som har både ref_hardware = 7 och engine = ''? Ibland är det de mest uppenbara sakerna som felar.
Edit: Kan det vara så att f.engine är satt till null (eller ' ' eller dylikt) istället för '' på raderna ifråga?

Medlem sedan juni 20006 031 inlägg
#3

japp, helt säker.

Gör jag den andra sökningen på 'rpm' så har jag resultat därifrån där engine är tom.

Medlem sedan aug. 20039 340 inlägg
#4

Om du söker på r.ref_hardware = 7 AND f.engine = '' eller t.o.m. bara f.engine = ''? (För att luska ut exakt vad som felar.)

Medlem sedan juni 20006 031 inlägg
#5

Båda försöken returnerar ingenting

Bifogar screenshot från Access

access.png
Medlem sedan juni 200032 967 inlägg
#6

Jag är nog lite inne på nitros NULL-spår.

Testa:

WHERE r.ref_hardware = 7 AND (f.engine = '' OR f.engine IS NULL OR f.engine = 'Diesel')

mvh

Medlem sedan juni 20006 031 inlägg
#7

Nu har vi kommit närmare.

Kolla engine med IS NULL funkar.

men...

rpm funkar inte med IS NULL, utan jag måste använda = ''

Så någon skillnad är det mellan fälten.

/red
Men jag kan ju köra med snabelns förslag att kolla både '' och IS NULL på fälten så är det löst

Medlem sedan juni 200032 967 inlägg
#8

tja, funkar det med '' så är det lagrat en tom sträng i fältet - funkar det med is null så är det lagrat som NULL i fältet. Så finns båda alternativen så får du kolla mot båda - om dessa båda skall hanteras likadant.

Mvh

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)