我有一个多对多的关系items
之间 - itemnames
- languages
查询与列(SQL Server)的分组结果
的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])
);
什么是所涉及的实际表(无图)。另外,如下所述,如果有多种非首选语言会发生什么? – Leigh 2012-04-20 03:24:30
这些是实际的表,如果有多个它应该得到最低的ID – Daniel 2012-04-20 15:17:21