テーブルa、a_xref_b、およびbを持つ正規化されたデータベースからレポートを生成しようとしています。SQL Server 2014でビューを作成して、一部のデータがないクロスリファレンステーブルのデータを表示するにはどうすればよいですか?
CREATE TABLE a (a_rid INT primary key, a1 varchar(20),);
CREATE TABLE b (b_rid INT primary key, b1 varchar(20), b2 varchar(20));
CREATE TABLE a_xref_b (a_rid INT, b_rid INT,xref_type int
CONSTRAINT fk_a FOREIGN KEY (a_rid) REFERENCES a (a_rid),
CONSTRAINT fk_b FOREIGN KEY (b_rid) REFERENCES b (b_rid));
INSERT INTO a VALUES (1,'John'), (2,'Sue')
INSERT INTO b VALUES (1,'Atlanta','GA'), (2,'Macon','GA'), (3,'Opp','AL')
INSERT INTO a_xref_b VALUES (1,1,1), (1,2,2), (2,3,1)
表A及びBは、相互参照され、相互参照は、Bのデータが何を表すかを定義するタイプを有する有します。
シナリオ - ジョンには主要都市と代替都市が用意されています。スーは主要都市だけを提供した。
私は、名前、主要都市、および代替を持つページを読み込むためのビューを作成しようとしています。
Name b_rid_t1 City_t1 St_1 b_rid_2 City_t2 St_t2
John 1 Atlanta GA 2 Macon GA
Sue 3 Opp AL NULL NULL NULL
それはスーの記録をドロップしかし、私はこの
select
a.a1,
b_1.b_rid,
b_1.b1,
b_1.b2,
b_2.b_rid,
b_2.b1,
b_2.b2
from
a
left join
a_xref_b as xf1
on a.a_rid = xf1.a_rid
inner join
b as b_1
on xf1.b_rid = b_1.b_rid
and xf1.xref_type = 1
left join
a_xref_b xf2
on a.a_rid = xf2.a_rid
inner join
b as b_2
on xf2.b_rid = b_2.b_rid
and xf2.xref_type = 2
を試してみました。外部参照からbへの左結合に変更すると、重複レコードが取得されます。
実際のシナリオは、アドレステーブルと相互参照されるコンタクトテーブルで、xrefテーブルにはタイプフィールドがあります。私たちはページを読み込むためのビューを構築しようとしています。
使用を?? – sagi
あなたの質問はうまくいきますが、挨拶、感謝の気持ちなどは騒音とみなされます。あなたは実際の質問に集中することができ、すべてが問題ありません。あなたのsqlのreadyabilityを向上させるには、適切なインデントを加えるためにhttp://www.freeformatter.com/sql-formatter.htmlのようなツールを使用することができます – Philipp