Nu är det så att jag vill lösa detta även om jag gör en inner join.
Här har jag en artikel som även har artikelstatus som ligger i en tabell och där kan ju statusen ha olika namn beroend på språk, och om den inte hittar just mitt språk så vill jag att den tar defaultspråket.
DECLARE @LCID int
SET @LCID = 1053
SELECT t.Identifier, t.Number, t.Name,
t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier AND t1.lcid = @LCID
GO
Denna kod ger mig inga svar, eftersom det inte finns någon LCID som har värdet 1053, men det finns om jag ändrar till 1033, då får jag följande träffar.
8F4C29FB-F958-4BDE-853B-D91CD16D645B 0000123 Test article A41E7BC5-D82D-44AE-A4CD-BD3BAA039F00 Prototype
AB65F153-6F20-4D7B-A0DA-E2927A18A3EB 1254689 Ebba A804A6A4-2CFB-4232-9B5C-879B44AA7626 Active
Hur får jag samma resultat om jag inte vet om det finns något på 1053, men finns det något på 1053 så vill jag ha det och inte 1033...
DECLARE @LCID int
SET @LCID = 1053
SELECT t.Identifier, t.Number, t.Name,
t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier ((AND t1.lcid = @LCID) OR (t1.lcid = 1033))
GO
Nja, då kommer jag ju få 2 träffar om både 1033 och 1053 finns, det vill jag ju inte, så fall vill jag bara ha träff på 1053. Finns det inget på 1053 så fall ta värdet från 1033 (som alltid finns).
Efter lite testade så var det inte så svårt (om man tittade på svaret i förra tråden)
SELECT t.Identifier, t.Number, t.Name,
t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier
AND (t1.lcid = @LCID OR (t1.lcid=1033 AND t1.identifier NOT IN (SELECT identifier FROM dbo.ArticleStatus WHERE lcid=1053))
)
- M
250 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25