Avatar billede prebenrunge Nybegynder
06. oktober 2011 - 19:43 Der er 9 kommentarer og
1 løsning

Hjælp til Left Join

Jeg har følgende sætning som IKKE vise ALLE poster fra Atabel:

Select a.idnr, t.navn,t.adresse,t.udgivdato
FROM [Atabel] a
left JOIN [Ttabel] t
ON a.idnr = t.idnr
where a.udgaaet != 1
and t.udgivdato = convert(datetime,'08-10-2011',105)

Jeg ønsker at se ALLE poster fra a, men kun den delmængde fra t, som har den korrekte dato,
da der findes mange andre med andre datoer som jeg ikke vil have,
men jeg får KUN dem fra a, som har denne dato.

HVEM kan se hvad der er galt

Hilsen Preben
Avatar billede Syska Mester
07. oktober 2011 - 02:14 #1
hmmm, det kan vist ikke passe.

Kan du komme med lidt data for begge tables som virker hvad der fejler og hvad du regnede med at få ud.

Og nej, du får kun alle poster fra A ud som også har en post i table T, da du laver en predicate på den table, som skal have den præcise dato.

Men ... lidt test data ... hvad der er i begge tables, det forkert resultat og hvad du havde forventet. Så skal jeg hjælpe.
Avatar billede Syska Mester
07. oktober 2011 - 02:14 #2
hmmm, det kan vist ikke passe.

Kan du komme med lidt data for begge tables som virker hvad der fejler og hvad du regnede med at få ud.

Og nej, du får kun alle poster fra A ud som også har en post i table T, da du laver en predicate på den table, som skal have den præcise dato.

Men ... lidt test data ... hvad der er i begge tables, det forkert resultat og hvad du havde forventet. Så skal jeg hjælpe.
Avatar billede Syska Mester
07. oktober 2011 - 02:15 #3
Åhhh, cache, nat og eksperten ... tak for LORT.
Avatar billede arne_v Ekspert
07. oktober 2011 - 03:35 #4
proev:

Select a.idnr, t.navn,t.adresse,t.udgivdato
FROM [Atabel] a
left JOIN [Ttabel] t
ON a.idnr = t.idnr and t.udgivdato = convert(datetime,'08-10-2011',105)
where a.udgaaet != 1
Avatar billede prebenrunge Nybegynder
07. oktober 2011 - 10:00 #5
Tak arne_v
jeg vidste ikke man kunne sætte where delen in i ON delen,
men det kan man jo og så virker den fint.

lægger du et svar, så vi kan lukke spørgsmålet ?

Ved du iøvrigt hvordan man lukker et spørgsmål UDEN noget svar,
hvis der aldrig kommer et svar (jeg har gamle spørgsmål, som jeg ikke har lukket
og nu da andre har beklaget sig, måtte give mig selv et svar for at lukke tråden -
men det er vel ikke den korrekte måde ?)
Avatar billede Syska Mester
07. oktober 2011 - 11:21 #6
#prebenrunge
Nej, det er eneste måde at selv lave et svar og så acceptere det.

#arne_v
Burde de 2 SQL Sætninger ikke give det samme? Er det ikke bare et spm om udseende. Jeg kan ikke lige gennemskue hvorfor den ene skulle virke frem for den anden ... er der noget jeg har overset ?
Avatar billede arne_v Ekspert
07. oktober 2011 - 16:17 #7
svar
Avatar billede arne_v Ekspert
07. oktober 2011 - 16:25 #8
buzzzz>

Naesten det samme men ikke helt det samme.

Naar den er i ON faar man de raekker med fra a som ikke har et matchende t - det goer man ikke med den i WHERE.

SELECT *
FROM a LEFT JOIN t ON a.id=t.id
WHERE t.f=x

udfoeres som:

SELECT *
FROM (SELECT * FROM a LEFT JOIN t ON a.id=t.id) z
WHERE z.f=x

mens:

SELECT *
FROM a LEFT JOIN t ON a.id=t.id AND t.f=x

udfoeres som:

SELECT *
FROM a LEFT JOIN (SELECT * FROM t WHERE t.f=x) z ON a.id=z.id
Avatar billede Syska Mester
07. oktober 2011 - 17:07 #9
Makes sense ... da den ene join tager unmatched med når det er i selve "JOIN" delen.

Det er nok fordi jeg ikke så ofte har predicates på min joined table.

I så fald skriver jeg den nok bare en anden måde hvis jeg endelig har været ude for det.

Men tak for de ekstra informationer.
Avatar billede prebenrunge Nybegynder
07. oktober 2011 - 18:11 #10
ja det kan jeg forstå nu.
Arne tak for hjælpen, jeg godkender og accepterer dit svar

(jeg har  iøvrigt lukket de gamle spørgsmål )

Hilsen Preben
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