08. oktober 2002 - 14:34
Der 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
08. oktober 2002 - 14:36
#1
select * from adresse where hus_nummer = '1'
når det kun er tal, skal der ikke være ''
så derfor skal det være
select * from adresse where hus_nummer = 1
08. oktober 2002 - 14:36
#2
så vidt jeg husker skal der ikke '' om tal, prøv:
select * from adresse where hus_nummer = 1
08. oktober 2002 - 14:40
#3
where hus_nummer like '1%';V
- Viser alle poster, hvor første karakter/tal i husnummer er '1'.
where hus_nummer='1';
- Giver vist sig selv.
Det er nok dine data, som har ændret sig.
Hvilken type har feltet hus_nummer?
08. oktober 2002 - 14:41
#4
where hus_nummer like '1%';V 'V' skulle ikke have været med :o)
08. oktober 2002 - 14:43
#5
Der skal både være tal og bogstaver...dvs at et husnummer f.eks
kan være 11B
08. oktober 2002 - 14:47
#6
myggi >> hvilken Oracle datatype har du valgt for feltet hus_nummer?
08. oktober 2002 - 14:50
#7
Feltet har type varchar2
08. oktober 2002 - 14:51
#8
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
08. oktober 2002 - 14:59
#9
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';
Det er nok data du skal kigge på.
08. oktober 2002 - 15:10
#10
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 ???????
08. oktober 2002 - 15:23
#11
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.
08. oktober 2002 - 16:06
#12
i3448 >> Har du nogle gode links med uddybning af syge indeks?
(Det må godt være på Metalink).
08. oktober 2002 - 19:31
#13
select hus_nummer from adresse where hus_nummer= '1'
= 3 forekomster
der er ialt ca 1000 forekomster der kun indeholder '1'
select hus_nummer from adresse where hus_nummer like '1'
vises 3 forekomster
select hus_nummer from adresse where hus_nummer like '1%%'
her vises alle forekomster dvs alt der starter med 1
Mvh Sonja
PS for kort tid siden tildelte jeg yderligere tablespace....da
det var opbrugt...kan det være årsagen ????
09. oktober 2002 - 08:26
#14
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'
09. oktober 2002 - 11:07
#15
Lidt om corrupte indekser på metalink:
Note:1034886.6
Note:125149.1
12. oktober 2002 - 08:38
#16
i3448 >> Tak for info!
Computerworld tilbyder specialiserede kurser i database-management