Avatar billede myggi Nybegynder
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
Avatar billede bongobride Nybegynder
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
Avatar billede soreno Praktikant
08. oktober 2002 - 14:36 #2
så vidt jeg husker skal der ikke '' om tal, prøv:
select * from adresse where hus_nummer = 1
Avatar billede lasse_buck Nybegynder
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?
Avatar billede lasse_buck Nybegynder
08. oktober 2002 - 14:41 #4
where hus_nummer like '1%';V      'V' skulle ikke have været med :o)
Avatar billede myggi Nybegynder
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
Avatar billede lasse_buck Nybegynder
08. oktober 2002 - 14:47 #6
myggi >> hvilken Oracle datatype har du valgt for feltet hus_nummer?
Avatar billede myggi Nybegynder
08. oktober 2002 - 14:50 #7
Feltet har type varchar2
Avatar billede i3448 Nybegynder
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
Avatar billede lasse_buck Nybegynder
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å.
Avatar billede myggi Nybegynder
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 ???????
Avatar billede i3448 Nybegynder
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.
Avatar billede lasse_buck Nybegynder
08. oktober 2002 - 16:06 #12
i3448 >> Har du nogle gode links med uddybning af syge indeks?
(Det må godt være på Metalink).
Avatar billede myggi Nybegynder
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 ????
Avatar billede lasse_buck Nybegynder
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'
Avatar billede i3448 Nybegynder
09. oktober 2002 - 11:07 #15
Lidt om corrupte indekser på metalink:
Note:1034886.6
Note:125149.1
Avatar billede lasse_buck Nybegynder
12. oktober 2002 - 08:38 #16
i3448 >> Tak for info!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester