質問で説明した内容に基づいて、特定のテンプレートのすべてのアセットを取得する必要があります。テーブル構造を作成しましたが、テーブルにリレーション制約を定義していませんでしたが、クエリの作成中にそれらを使用しました。
Asset
テーブルをテーブルに結合できAssetForPresentation
ます。AssetForPresentation テーブルを介して、Presentation
とPosition
テーブルを結合できます。との関係はTemplate
、テーブルを介して作成できPosition
ます。したがって、TemplateテーブルをAssetテーブルに結合して、一致するすべてのレコードを取得します。
以下のリンクでデモを見ることができます。
SQL Fiddle でデモを表示するには、ここをクリックしてください。
それが役立つことを願っています。
脚本:
CREATE TABLE Presentation
(
id INT NOT NULL AUTO_INCREMENT
, name VARCHAR(30) NOT NULL
, PRIMARY KEY (id)
);
CREATE TABLE Template
(
id INT NOT NULL AUTO_INCREMENT
, name VARCHAR(30) NOT NULL
, PRIMARY KEY (id)
);
CREATE TABLE Position
(
id INT NOT NULL AUTO_INCREMENT
, zorder INT NOT NULL
, fk_template INT NOT NULL
, PRIMARY KEY (id)
);
CREATE TABLE Asset
(
id INT NOT NULL AUTO_INCREMENT
, name VARCHAR(30) NOT NULL
, description VARCHAR(30) NOT NULL
, PRIMARY KEY (id)
);
CREATE TABLE AssetForPresentation
(
fk_asset INT NOT NULL
, fk_presentation INT NOT NULL
, fk_position INT NOT NULL
);
INSERT INTO Presentation (name) VALUES
('presenation 1'),
('presenation 2');
INSERT INTO Template (name) VALUES
('template 1'),
('template 2');
INSERT INTO Position (zorder, fk_template) VALUES
(1, 1),
(2, 2);
INSERT INTO Asset (name, description) VALUES
('asset 1', 'asset description 1'),
('asset 2', 'asset description 2');
INSERT INTO AssetForPresentation (fk_asset, fk_presentation, fk_position)
VALUES
(1, 1, 1),
(1, 2, 1),
(2, 2, 1),
(2, 2, 2);
SELECT *
FROM Asset A
RIGHT OUTER JOIN AssetForPresentation AP
ON A.id = AP.fk_asset
RIGHT OUTER JOIN Presentation P
ON P.id = AP.fk_presentation
RIGHT OUTER JOIN Position PO
ON PO.id = AP.fk_position
RIGHT OUTER JOIN Template T
ON T.id = PO.fk_template
WHERE T.id = 1;
出力:
ID NAME DESCRIPTION FK_ASSET FK_PRESENTATION FK_POSITION ZORDER FK_TEMPLATE
-- ------- ------------------- -------- --------------- ----------- ------ -----------
1 asset 1 asset description 1 1 1 1 1 1
1 asset 1 asset description 1 1 2 1 1 1
2 asset 2 asset description 2 2 2 1 1 1