Avatar billede hkb-x Nybegynder
16. december 2008 - 12:15 Der er 11 kommentarer

sammenligning af felter med fæslles værdier

Hvis jeg har en tabel med 2 felter: felt_1 og felt_2. Hvordan får jeg så en liste over alle de forskellige felt_1 værdier der har den samme felt_2 værdi?
Avatar billede Syska Mester
16. december 2008 - 13:08 #1
hvis på row basis:
select * from table1 where col1 = col2;
Avatar billede hkb-x Nybegynder
16. december 2008 - 13:34 #2
det vil jo ikke retrunere de felt_11 værdier der har ens felt_2 værdier.
det du skriver vil bare retrunere noget hvor felt_1 = felt_2
Avatar billede nemlig Professor
16. december 2008 - 13:58 #3
Jeg er enig i Buzzzz's kommentar.
* returnerer alle felter, herunder også felt_1.
Hvis du kun vil have felt_1, kan du skrive:
select felt_1 from table1 where col1 = col2;

Du skal herefter køre en "while" for at liste alle de poster, som er hentet i din forespørgsel.
Avatar billede Syska Mester
16. december 2008 - 14:04 #4
Det er ikke tydeligt hvad du vil ...

Jeg skriver du kan gøre overstående hvis det er på row basis ...

Men med dit svar kan jeg næste forstå det er i hele din table ... men stadig ikke sikker.
Avatar billede hkb-x Nybegynder
16. december 2008 - 14:34 #5
for at gøre det klart så er det ikke i select delen jeg er i tvivl men i where.

jeg skal have en where der udtrykker at felt_1's felt_2 værdi skal være lig et andet felt_1's værdis felt_2 værdi. Jeg vil have alle felt_1 værdier med samme felt_2 værdier
Avatar billede Syska Mester
16. december 2008 - 14:40 #6
select felt1 from table1 as t1
inner join table1 as t2 on t1.felt1 = t2.felt2

Noget i den konstruktion ... og så eventuelt distinct på, for at undgå duplicates
Avatar billede hkb-x Nybegynder
16. december 2008 - 15:07 #7
perfekt. men det har en lidt ond køretidskompleksitet, jeg giver 40 point ekstra til den der kan finde en kompleksitet på under n^2
Avatar billede Syska Mester
16. december 2008 - 15:23 #8
Er den langsom ? hvis ... så mangler du indexes med mindre du har over 1 million rows.

Du kan måske spare noget tid ved at tage distinct values på begge table columns. og så joine de 2 ...

// ouT
Avatar billede hkb-x Nybegynder
16. december 2008 - 16:14 #9
jeg har lidt over 400.000 rækker. men det tager en halv times tid. og de er optimeret med indexes og der sammenlignes kun på rene ints.
Avatar billede Syska Mester
16. december 2008 - 16:31 #10
OMG. Der er mere galt end det hvis det tager en 30 mins.

Tror jeg kan beat den på en MSSQL med 47 mill rækker. på mindre end 1 sekund.

Dog uden at have testet da jeg ikke har adgang til min database lige nu.
Avatar billede hkb-x Nybegynder
16. december 2008 - 17:31 #11
jah det er bestemt ikke særligt rart.
den kører faktisk n^3 kompleksitet så er det der gør det, det havde jeg lige overset. selve den kode tager under et sek men tager men så det 400.000 gange bliver dte jo også en del.
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