Avatar billede segato Nybegynder
09. maj 2010 - 21:17 Der er 5 kommentarer og
1 løsning

Inner Join

Har følgende tabeller og data

Users
UserId    AdressId    Name
1    2    Thomas
2    1    Jens
3    null    Ole

Adresses
AdressId    Lang    Adress
1    da    København
1    en    Copenhagen
2    da    Århus
2    en    Aarhus

Jeg skal have lavet en procedure der tager to parametre lang og userid. Proceduren skal returnere følgende:

userid=1 & Lang='da' returnere
Thomas  Århus
userid=1 & Lang='en' returnere
Thomas  Aarhus
userid=3 & en returnere
Ole null

Havde overvejet noget i stil med en left outer join med en sub query på eller lign. Nogen der kan give en sql der løser mit prop?
Avatar billede janus_007 Nybegynder
09. maj 2010 - 21:50 #1
Hej Segato ;-)


create proc spComeGetSome
@userId int, @lang char(2)
as
begin

select Name, Adress from Users t
left outer join Adresses t1
on t1.Adressid = t.AdressId
and t.UserId = @userId
and t1.Lang = @lang
end

En procedure? jamen jamen.. jeg troede da du havde taget Linq til dig?
Avatar billede segato Nybegynder
09. maj 2010 - 22:13 #2
Hvad satan det jo Janus :D Bruger LINQ flittigt vil faktisk bruge linq til at generere mine klasser ud fra den stored procedure jeg laver.

Din sql virker lidt oplagt, men den virker desværre ikke for nummer tre scenario. userid=3 & lang='en' skal resultset være

Ole null

Det er der det tricky er :D
Avatar billede segato Nybegynder
09. maj 2010 - 22:23 #3
Det faktisk lidt pudsigt du skriver, imens sidder jeg og chatter med Rafi og han kan lidt tricks:

select p.ProfileID, p.BodyID, b.LanguageId
from Profile p
left join Body b
  on b.BodyID = p.BodyID
where p.ProfileID in( '1', '0')
and
(
    LanguageID = 'en' OR p.BodyID is null
)
Avatar billede janus_007 Nybegynder
09. maj 2010 - 22:25 #4
aha...


create proc spComeGetSome
@userId int,
@lang char(2)
as
begin

select u.Name, a.Adress from Users u
outer apply
    (
        select Adress from Adresses
            where AdressId = u.AdressId
                and Lang = @lang
                ) as a
where u.UserId = @userId

end
Avatar billede segato Nybegynder
09. maj 2010 - 22:38 #5
Den er faktisk lige i skuret også. Laver for lidt sql aldrig hørt om outer apply. Smid lige et svar. Og tak for hjælpen godt at se du stadig er sql master :D
Avatar billede janus_007 Nybegynder
09. maj 2010 - 22:50 #6
Jotak... laver nu stadig lidt Sql hist og pist :)

Ses
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