Avatar billede janorakel Nybegynder
09. december 2005 - 15:33 Der er 9 kommentarer og
1 løsning

Finde ord i stor database

Jeg skal finde nogle sammensatte ord i en stor database, men hvordan skal jeg lave SELECT, hvis jeg ikke ved hvilken tabel data er i?
Jeg skal søge i alle tabeller og alle felter i hele databasen.
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:36 #1
SELECT * FROM tabel1,tabel2,tabel3,osvosv WHERE feltnavn=søgekriterie
På den måde søger du alle tabeller igennem og vælger kun de rækker som har det kriterie du stiller

Vh Nicki
Avatar billede janorakel Nybegynder
09. december 2005 - 15:54 #2
Jo, men jeg kender ikke hvilken tabel eller felt hvori data ligger, bare at de ligger i databasen
Avatar billede innercitydk Nybegynder
09. december 2005 - 17:11 #3
med * vælger du alle felter i de respektive tabeller.. Du skal skrive hvilke tabeller den skal kigge i, det kan ikke omgås. Det bliver en lang sql hvis der er mange tabeller men sådan skal det desværre være

Vh
Avatar billede arne_v Ekspert
09. december 2005 - 20:59 #4
det er ret håbløst at lede i en database uden at kende tabel og feltnavne

innercitys SQL vil give syntax fejl fordi feltnavn ikke er entydigt defineret

SELECT *
FROM tabel1,tabel2,tabel3
WHERE tabel1.feltnavn=søgekriterie OR
tabel2.feltnavn=søgekriterie OR
tabel3.feltnavn=søgekriterie

vil ikke give syntax fejl, men vil returnere alt for mange rækker

(1000 rækker i hvert tabel med 2 match vil ikke give 6 rækker, men 6 millioner rækker)

(SELECT *
FROM tabel1
WHERE feltnavn=søgekriterie)
UNION
(SELECT *
FROM tabel2
WHERE feltnavn=søgekriterie)
UNION
(SELECT *
FROM tabel3
WHERE feltnavn=søgekriterie)

vil give 6 rækker
Avatar billede innercitydk Nybegynder
10. december 2005 - 02:23 #5
der er jeg ikke enig arne han vil jo netop finde de tabeller hvor de kriterier han opstiller er givet.. Derfor vil det heller ikke give en fejl.. Når jeg kører forespørgslen på mine egne tabeller virker det!! Feltet returnerer jo netop de tubler hvor kriterierne er opfyldt! Selvfølgelig skal kriterierne skrives anderledes end jeg har gjort det burde du også se arne!
Avatar billede hacked Nybegynder
10. december 2005 - 02:57 #6
I har begge to ret efter min mening - Det kommer an på om kolonnen specifikt hedder "feltnavn". Efter min mening skal man ikke lægge så meget vægt på feltnavn idet det må anses som værende en overordnet betegnelse for tabellernes kolonnenavne.
Såfremt en tabel indeholder en kolonne hvis navn findes i en anden tabel vil der kommer en sql syntaks fejl fordi 'feltnavn' ikke vil være entydigt defineret (hvis man anvender innercitys SQL).

Lille spørgsmål til arne_v's regnestykke - Hvordan kommer du frem til 6 millioner rækker? ( din beregning plz :) )
Avatar billede Slettet bruger
10. december 2005 - 07:51 #7
arne_v regnestykke forklaret:

http://www.postgresql.org/files/documentation/books/aw_pgsql/node64.html#unjoined_tables

IMHO, hvis det er et engangs skud så gør det ikke noget, men hvis det skal køre produktion, så find en anden måde at løse det på det koster spidsen af en rumraket at køre den forespørgsel hvis man har flere data end man selv kunne overskue det alligevel.

Husk nu at hvis du har en database med ikke ret meget data så kan du gøre ting som det passer dig. Derfor check ideer på tabeller med 100.000+ rækker.
Avatar billede innercitydk Nybegynder
10. december 2005 - 10:16 #8
Ja det skulle være WHERE indholdifelt = kriterie :P
Avatar billede arne_v Ekspert
10. december 2005 - 20:56 #9
2*1000*1000 + 1000*2*1000 + 1000*1000*2 = 6 millioner
Avatar billede arne_v Ekspert
10. december 2005 - 21:17 #10
Jeg nægter at tro på at PostgreSQL ikke giver fejl p.g.a. ambiguous feltnavn
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