有两张表A和B,A是人员基本信息,B人员报酬信息,两张表通过id关联,B中的记录只与A中的一部分记录对应,即A中有一部分记录在B中没有对应的记录,现在要基于A和B创建一个视图,这个视图包含A、B的所有列、所有记录,如果A中的记录在B中没有对应的记录,则sal显示为null,注意不能用左、右连接等实现,SQL尽量简单、不用过多嵌套查询。这是我实际工作中简化后的模型,实际情况是有8张表,1张主表,7张从表,每张表都对应主表的一部分记录。
A(
id varchar2(18),
per_sex char(1),
per_name varchar2(200)
)B(
id varchar2(18),
sal varchar2(10)
)
A(
id varchar2(18),
per_sex char(1),
per_name varchar2(200)
)B(
id varchar2(18),
sal varchar2(10)
)
select A.*,B.sal from A,B where a.ID=b.ID
union all
select A.*,NULL from A where not exists(select * from B where ID=A.ID)
比如
create view V_AB
(
id,per_sex,sal
)
select
id,per_sex,(select sal from B where b.id = id 我想知道此处有没有什么机制能够把A表当前记录的id传过来啊?)
from A
当再加上条件查询的时候,有的可能可以转化为index scan ,这样最终还不算太慢。
除了这个就是修改数据结构,恐怕不行的。