我有一个多对多的关系items
- itemnames
-languages
itemnames
不会出现在每种语言中。
我想得到一个所有项目只表示一次的结果,但能够将其设置languageId
为默认值。
例如项目 1,2,3 用两种语言定义,项目 4 和 5 各有一种语言,但语言不同
[itemid][languageid][name]
1, 1, item1
1, 2, leItem1
2, 1, item2
2, 2, leItem2
3, 1, item3
3, 2, leItem3
4, 1, item4
5, 2, leItem5
我想创建一个查询,只给我一个itemID
,但允许我指定首选哪种语言,所以如果我选择languageID
2,我的查询将只返回以“leItem”开头的项目名称第 4 项除外,它仍然应该给我item4
任何想法如何通过 SELECT 实现这一目标?
理论(我试图让它工作)是我创建两个查询,一个用于所有languageID
匹配 x 的地方,第二个用于表示每个项目(按组或不同),然后合并结果。
生成表的sql
-- Languages
CREATE TABLE [Languages] (
[id] INT NOT NULL PRIMARY KEY IDENTITY,
[language] NVARCHAR(20) NOT NULL ,
[languagecode] NVARCHAR(6) NOT NULL
);
-- Items
CREATE TABLE [Items] (
[id] INT NOT NULL PRIMARY KEY IDENTITY,
[ImageId] INT ,
[lastupdate] DATETIME,
[isactive] BIT NOT NULL DEFAULT 'TRUE'
);
-- ItemNames
CREATE TABLE [ItemNames] (
[itemId] INT NOT NULL ,
[languageId] INT NOT NULL ,
[name] NVARCHAR(50) NOT NULL ,
FOREIGN KEY (itemId) REFERENCES Items(id),
FOREIGN KEY (languageId) REFERENCES Languages(id),
PRIMARY KEY ([itemId],[languageId])
);