Avatar billede wildthing Nybegynder
25. april 2005 - 14:59 Der er 10 kommentarer og
1 løsning

undgå dubletter på left join tabel

Jeg ved det! der er flere spørgsmål omkring dette, men jeg har ikke fundet lige min situation.

jeg har en tabel tisfc001 der med en left join knytter table tisfc010

altså sådan noget som dette...
select tisfc001.pdno, tisfc010.cwoc
from tisfc001 left outer join tisfc010 ON tisfc001.pdno = tisfc010.pdno

tisfc010 har flere records der matcher pdno feltet

Hvad jeg behøver er blot at vide om feltet tisfc010.cwoc i blot een af de mange records har værdien x. Hvis ja skal tisfc001.pdno vises på en liste, ellers ikke. Når jeg bruger min left outer join får jeg lige så mange linier vist som der er records i tisfc010 med tisfc010=x.

skal jeg bruge DISTINCT eller hva....?

wildthing
Avatar billede ldanielsen Nybegynder
25. april 2005 - 15:01 #1
Jeg ville bruge GROUP BY

select tisfc001.pdno
from tisfc001
left outer join tisfc010 ON tisfc001.pdno = tisfc010.pdno
GROUP BY
tisfc001.pdno
Avatar billede ldanielsen Nybegynder
25. april 2005 - 15:03 #2
Men bemærk at du så ikke umiddelbart kan vælge felter fra tisfc010, hvis du ikke vil have dubletter. Hvis du vælger tisfc010.cwoc skal du også GROUP'e på den:

GROUP BY
tisfc001.pdno, tisfc010.cwoc

- og så vil der komme dubletter hvis tisfc010.cwoc varierer.
Avatar billede ldanielsen Nybegynder
25. april 2005 - 15:07 #3
Hov, nu har jeg lige læst dit spørgamål ordentligt, og hvis du bare vil have en liste over poster i tisfc001 som har relaterede poster i tisfc010, så kan du bruge inner join:

SELECT tisfc001.pdno
FROM tisfc001
INNER JOIN tisfc010 ON tisfc001.pdno = tisfc010.pdno
GROUP BY
tisfc001.pdno


Eller du kan benytte den mere intutive:

SELECT tisfc001.pdno
FROM tisfc001 WHERE tisfc001.pdno IN
(SELECT tisfc010.pdno FROM tisfc010)

- Men jeg vil tro at den sidste er tungere at køre
Avatar billede wildthing Nybegynder
25. april 2005 - 15:19 #4
OKAY. Klart med INNER JOIN. Det overså jeg i eksemplet.

Men, men
Jeg har i min virkelige SQL 20 felter fra 3 tabeller som joines, skal jeg så virkelig have dem alle med i en GROUP BY for at få det til at virke?

wildthing
Avatar billede wildthing Nybegynder
25. april 2005 - 15:29 #5
anyway det virker, selvom det for mig virker kluntet at kode så meget for så lidt.

smid blot et svar  ldanielsen

mvh
wildthing
Avatar billede ldanielsen Nybegynder
25. april 2005 - 22:32 #6
Svar

Du skal ikke bekymre dig så meget over at din SQL bliver "lang", det er ikke det der belaster databasen. Men det er lidt belastende for programmøren :o)
Avatar billede ldanielsen Nybegynder
25. april 2005 - 22:35 #7
En anden mulighed er at du ikke undgår dubletter, men lever med dem.

Hvis det nu var asp, og jeg skulle loope gennem et recordset med dubletter, men f.eks. kun vil skrive en ny linie for hver "nye" post, så ville jeg gøre sådan:

Dim lastID
lastID = 0

do while blabla
  if lastID <> Rec("ID") then
    'Udskriv linie
    lastID = Rec("ID")
  end if
  'MoveNext eller noget ...
loop

- hvis du forstår?
Avatar billede wildthing Nybegynder
26. april 2005 - 08:29 #8
Jo jeg forstår. Og ja, det er ASP jeg sidder med, men jeg foretrækker at ramme så præcist som muligt med SQL kaldet. Jeg går ud fra det er hurtigst/performer bedst. Ellers har jeg også gjort det på din denne måde flere gange.

mangler dit svar så du kan få points:)

wildthing
Avatar billede ldanielsen Nybegynder
26. april 2005 - 11:07 #9
Åh ja ...
Avatar billede janus_007 Nybegynder
27. april 2005 - 00:49 #10
Når du bruger ASP så vil jeg anbefale dig at bruge DataShaping til den slags.
Avatar billede wildthing Nybegynder
27. april 2005 - 08:25 #11
Og det er lige???
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