select title,
coalesce(name,
(select name
from language
where languageId in
(select languageid
from languageInApplication
where isDefault = 1
and applicationId in
(select id
from application
where title = @appname))
from application
left join languageApplication on application.id = languageApplication.applicationid
left join language on languageApplication.languageID = language.id
and language.twoLetterName = @language
Frågan#1
SqlServer 2005
CREATE TABLE [Application]
(
[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Title] [nvarchar] (50) NOT NULL
)
CREATE TABLE [Language]
(
[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[TwoLetterName] [char] (2) NOT NULL,
[Name] [nvarchar] (50) NOT NULL
)
CREATE TABLE [LanguageInApplication]
(
[LanguageId] [int],
[ApplicationId] [int,
[IsDefault] [bit]
)
INSERT INTO [Application](Title) VALUES('App 1');
INSERT INTO [Language](TwoLetterName, [Name]) VALUES('sv', 'Svenska');
INSERT INTO [Language](TwoLetterName, [Name]) VALUES('en', 'Engelska');
INSERT INTO [Language](TwoLetterName, [Name]) VALUES('es', 'Spanska');
INSERT INTO [Language](TwoLetterName, [Name]) VALUES('fr', 'Franska');
INSERT INTO [LanguageInApplication](LanguageId, ApplicationId, IsDefault) VALUES(1, 1, 1);
INSERT INTO [LanguageInApplication](LanguageId, ApplicationId, IsDefault) VALUES(1, 2, 0);
INSERT INTO [LanguageInApplication](LanguageId, ApplicationId, IsDefault) VALUES(1, 3, 0);
INSERT INTO [LanguageInApplication](LanguageId, ApplicationId, IsDefault) VALUES(1, 4, 0);
CREATE PROCEDURE dbo.Application_GetSomething
(
@appname varchar(50),
@language char(2)
)
AS
/*
Vill ta ut Application.Name och Language.Name
där Application.Name = @appname och Language.TwoLetterName = @language.
Om Language.TwoLetterName inte finns så skall den ta den
Language.Name som har LanguageInApplication.IsDefault
*/