私は多対多の関係を持っていitems
ますitemnames
---languages
すべてのitemnames
言語に表示されるわけではありません。
すべてのアイテムが1回だけ表示された結果を取得したいのlanguageId
ですが、デフォルトに設定できます。
たとえば、項目1、2、3は2つの言語で定義されており、項目4と5にはそれぞれ1つの言語がありますが、言語は異なります。
[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
それぞれ1つだけを与えるクエリを作成したいのですitemID
が、どの言語を優先するかを指定できるので、2つを選択するlanguageID
と、クエリは「leItem」で始まるアイテム名のみを返します。項目4を除いて、それでも私に与えるはずですitem4
SELECTでこれを達成する方法はありますか?
理論(私がそれを機能させようとしている方法)は、2つのクエリを作成することです。1つはlanguageID
xに一致するすべてのクエリに対して、もう1つは各アイテムが(グループまたは個別に)表される場所で、結果をマージします。
テーブルを生成するための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])
);