webForumDet fria alternativet

Joins

Databaser & SQLur Databashanterare & SQL

2 svar · 323 visningar · startad av Gladh

Medlem sedan maj 20012 812 inlägg
Frågan#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

Medlem 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'
Medlem 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

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