Avatar billede jake_2 Nybegynder
05. maj 2003 - 16:06 Der er 10 kommentarer og
1 løsning

en lille SQL problem.

Jeg mangler en lille stump SQL.
Jeg har to tabeller.

tabel a.
w1,w2,...,w50

tabel b.
w1,w2,...,w50

Der er i hver af tabellerne en række "sætninger". Feks.
tabel a (første linie)
w1=Dette , w2=er ,w3=et ,w4=eksempel

tabel b (første linie)
w1=Et, w2=eksempel ,w3=er, w4=godt ,w5=at ,w6=have.

Jeg ønsker nu en sql som finder de sættninger som har mere end to ord til fældes. F.eks. har de to første linier i eksemplet 3 fælles ord.
(Det er ikke kun w1=w1 and w2=w2.. som skal gælde)
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 16:08 #1
Det er en dum måde at organisere sine data på. I stedet for en "bred"
tabel med 50 felter, skal du lave en "høj" tabel med 2-3 felter og optil
50 rækker. Ellers kan du slet ikke få SQL til at hjælpe dig med det.

Og selv så tvivler jeg umiddelbart på du kan gøre det kun i Sql...
Avatar billede jake_2 Nybegynder
05. maj 2003 - 16:09 #2
jeg har i tabel a 5.000.000 rækker og i tabel b 143 rækker.
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 16:12 #3
SÅ får du nogle flere rækker. Sql selv kan intet gøre for dig sådan.
Avatar billede jake_2 Nybegynder
05. maj 2003 - 16:13 #4
Der er vel ikke noget ivejen med et "bred" tabel så længe data er normaliseret !!
Avatar billede jake_2 Nybegynder
05. maj 2003 - 16:15 #5
Du er meget hurtig til at sige at det ikke kan lade sig gøre... Jeg er nu ikke sikker på at du har ret. Hvad er dit argument for at det ikke kan lade sig gøre?
Avatar billede jake_2 Nybegynder
05. maj 2003 - 16:18 #6
Men hvis du heller vil arbejde med tabeller med to felter kan disse jo bare laves om.???
create table test as
select _n_,w1 from bla...

insert into table
select _n_,w2 from bla...

...
...
..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 19:02 #7
Det kan ikke lade sig gøre i SQL. Sikkert heller ikke hvis
du "vender tabellen om". Du er nødt til at have et rigtigt
programmeringssprog bagved.
Avatar billede jake_2 Nybegynder
05. maj 2003 - 21:50 #8
Jeg tror jeg har fundet en løsning selv som består af en SQL sætning.
Jeg prøver den lige af i morgen og hvis den fungere sætter jeg den på.
(O: Man kan alt med SQL
Avatar billede jake_2 Nybegynder
07. maj 2003 - 10:44 #9
Jeg har lavet to lister,
liste a.
Nr navn
liste b.
nr navn

hvor navnet er delt op på feks.
gammel obs.
nr=7 w1=jakob w2=madsen
vil nu hedder
nr=7 navn=jakob
n=7 navn=madsen

Kode kommer så til at hedde (den er ikke helt færdig):

select distinct kundenr,nr from kunder3 as ydreK,terror2 as ydreT
where 2 in
(select distinct count(*) from kunder3 as indreK,terror2 as indreT
where ydreK.kundenr=indreK.kundenr and
      ydreT.nr=indreT.nr and
      indreK.w1=*indreT.w1
);
Avatar billede jake_2 Nybegynder
07. maj 2003 - 10:50 #10
koden er kommet til at se lidt anderledes ud.
proc sql;
create table mulige as
select distinct kundenr,nr from kunder3 as ydreK,terror2 as ydreT
having
(select distinct count(*) from kunder3 as indreK,terror2 as indreT
where ydreK.kundenr=indreK.kundenr and
      ydreT.nr=indreT.nr and
      indreK.w1=*indreT.w1
)>=2;

quit;
Avatar billede jake_2 Nybegynder
07. maj 2003 - 10:51 #11
Hvis der er nogen som kan komme med et optimerings forslag til denne kode vil jeg godt give point for dette.
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