长话短说
有一个主表A,两个从表B和C,B和C与A存在相同的主表键关联,我想通过一个视图查询出我所要的三个表中的所有信息,示例如下:
A
A_ID(主键) A_CODE A_NAME
1 001 张三 B
B_ID(主键) A_ID(外键) B_CODE B_NAME
1 1 001 王五 C
C_ID(主键) A_ID(外键) C_CODE C_NAME
1 1 001 李四
2 1 002 赵六 我想知道能不能通过一个视图查询出B中有一条关联记录和C中有两条关联记录,现在我建的视图查询出来的B有两条重复的记录,相当于B和C做了称得上笛卡尔积
请高手赐教!
有一个主表A,两个从表B和C,B和C与A存在相同的主表键关联,我想通过一个视图查询出我所要的三个表中的所有信息,示例如下:
A
A_ID(主键) A_CODE A_NAME
1 001 张三 B
B_ID(主键) A_ID(外键) B_CODE B_NAME
1 1 001 王五 C
C_ID(主键) A_ID(外键) C_CODE C_NAME
1 1 001 李四
2 1 002 赵六 我想知道能不能通过一个视图查询出B中有一条关联记录和C中有两条关联记录,现在我建的视图查询出来的B有两条重复的记录,相当于B和C做了称得上笛卡尔积
请高手赐教!
order by b_code,c_code
group by b_code,c_code
having count(c_id)=2;
A_ID B_CODE B_NAME C_CODE C_NAME
1 001 王五 001 李四
1 001 王五 002 赵六
B的记录重复了
select a_id,a_id,a_code,a_name from tab_a
union all
select b_id,a_id,b_code,b_name from tab_a a,tab_b b where a.a_id(+)=b.b_id
union all
select c_id,a_id,c_code,c_name from tab_a a,tab_c c where a.a_id(+)=c.c_id
這樣寫就可以啊:
SELECT c.* FROM c
WHERE c.a_id IN (SELECT b.a_id FROM b,a WHERE a.a_id = c.a_id)
CREATE VIEW abc_view
AS
SELECT c.* FROM c
WHERE c.a_id IN (SELECT b.a_id FROM b,a WHERE a.a_id = c.a_id)