webForumDet fria alternativet

Joins

2 svar · 323 visningar · startad av Gladh

GladhMedlem sedan maj 20012 812 inlägg
#1

Hallå!

Jag har lite problem med Join som inte fungerar som jag trodde :(

Jag har 2 tabeller, en som heter Language som innehåller de olika språk som kan finnas i en databas. Där har jag 2 poster sv-SE och en-US som båda är definerade som nyckel (identifier)

Till detta har jag sedan en massa olika language tabeller. Till min Category tabell så har jag en speciell LanguageCategory. Så jag kan på ett enkelt sätt kan få ut rätt "namn" på kategorin utifrån språk och kategoriID.

I Min LanguageCategory tabell så har jag en post som består av följande data:

categoryIdentifier: ccd63987-4681-402c-b722-2686daf64900
languageIdentifier: sv-SE
name: Möbler

Jag vill nu plocka ut all de olika språk som jag har (2 st) och matcha ihop med de kategorier som jag har (1 st). Men jag vill även visa de språk som inte har en kategori, så jag kan fylla i värde för detta språk.

Jag trodde en Right join skulle fungera bra för mig här:

SELECT     dbo.Language.identifier, dbo.LanguageCategory.name
FROM         dbo.LanguageCategory RIGHT OUTER JOIN
                      dbo.Language ON dbo.LanguageCategory.languageIdentifier = dbo.Language.identifier
WHERE     (dbo.LanguageCategory.categoryIdentifier = 'ccd63987-4681-402c-b722-2686daf64900')

Det ger mig

identifier              name
============================
sv-Se                 Möbler

Men jag vill ha:

identifier              name
============================
sv-Se                 Möbler
en-US                 NULL

Hur skall jag lösa detta?

- M

@ndersMedlem sedan juni 200032 969 inlägg
#2

Om du sätter villkor i WHERE-tabellen på den "icke krävda" tabellen gör du egentligen om din outer join till en inner. Flytta villkoret till join-satsen istället:

SELECT     dbo.Language.identifier, dbo.LanguageCategory.name
FROM         dbo.LanguageCategory RIGHT OUTER JOIN
                      dbo.Language ON dbo.LanguageCategory.languageIdentifier = dbo.Language.identifier
AND   dbo.LanguageCategory.categoryIdentifier = 'ccd63987-4681-402c-b722-2686daf64900'
GladhMedlem sedan maj 20012 812 inlägg
#3

Aaaa....

Tack, då fungerar Right join som jag misstänkte. Men jag skall låta bli att använda Sql Servers autogenerering av SQL när man bygger vyer...

- M

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)