我正在尝试使用表a,a_xref_b和b从标准化数据库生成报告 .
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,那么我会得到重复的记录 .
真实场景是与地址表交叉引用的联系表,外部参照表具有类型字段 . 我们正在尝试构建一个加载页面的视图 .
3 回答
试试这个,你应该用a_xref_b表连接添加xref_type条件 .
您需要使用数据透视表或使用提供相同类型结果的SQL语句 . 例如:
另一种方法可能是使用Union: