08. oktober 2002 - 14:34Der er
15 kommentarer og 1 løsning
Forkert resultat ved select
Hvis jeg f.eks udfører følgende søgning: select * from adresse where hus_nummer = '1' får jeg ikke vist nogen forekomster i databasen. MEN hvis jeg anvender denne søgning: select * from adresse where hus_nummer like '1%%' kommer alle forekomster... DET ER MIG EN GÅDE da det tidligere har virket
prøv et af følgende: 1)select length(hus_nummer) from adresse where hus_nummer like '1%'; -- for at se om der kun er et 1-tal i hus_nummer (og ikke flere tegn) 2)select * from adresse where hus_nummer||'' = '1'; -- for at se om du har et sygt indeks på hus_nummer
Dette eksempel virker fint: create table adresse (id number not null, hus_nummer varchar2(10)); insert into adresse values (1, '1'); insert into adresse values (2, '1A'); insert into adresse values (3, '13B'); insert into adresse values (4, '14C 3. sal'); insert into adresse values (5, '22'); select * from adresse where hus_nummer like '1%'; select * from adresse where hus_nummer = '1';
ved select length(hus_nummer) from adresse where hus_nummer like '1%'; er næsten alle forekomster length(hus_nummer) 4 dog er der et par enkelte på 1 og 2
Ved select * from adresse where hus_nummer||'' = '1' vises kun 3 forekomster ???????
OK 1) tilrettet lidt så du kan se om hus_nummer med '1 'også har længden en 1)select length(hus_nummer),hus_nummer from adresse where hus_nummer like '1%'; Ved 2) hvis din egen: select * from adresse where hus_nummer = '1'; giver 0 resultater, mens select * from adresse where hus_nummer||'' = '1'; giver 3 hits, og du ikke i mellmtiden har lavet om på data, prøv at droppe alle indekser på adresse tabellen og oprette dem forfra.
Oprindeligt skrev du, at der IKKE var nogen forekomster. Nu har du pludselig 3???
Hvis WHERE hus_nummer = '1'; og WHERE hus_nummer||'' = '1'; giver samme resultat, så er der ikke noget galt med dine indeks.
where hus_nummer like '1'; where hus_nummer = '1'; where hus_nummer||'' = '1'; Er alle identiske, hvis du ikke har syge indeks og anvender datatypen VARCHAR2.
Det er på tide at kigge nærmere på dine data: Dit resultat siger 3 forekomster. Find selv mere end tre rækker, som du mener BURDE være med og undersøg værdien af hus_nummer. Hvad er LENGTH(hus_nummer) ?
Vi er vel enige om, at INGEN af nedenstående strenge opfylder ...LIKE '1' eller ...= '1' ? '1 ' ' 1' '1B' '12'
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.