有A、B、C、D四个表,B、C、D表中的记录都是A表中记录的属性。现在要建立一个视图,以实现分别查询出四个表中的需要的字段我现在的方法是
建立视图AB A left jion B
建立视图ABC AB left join C
建立视图ABCD ABC left join C现在就从视图ABCD中查询但有个问题,就是B、C、D表中都有多条记录与A表中的记录关联,这样,在视图ABCD中A表中的记录就有了多条记录。
比如:
B中与A相关的有2条,则视图AB中就有2条A的重复记录,这不影响查询
但如果C中也有与A相关的记录2条,则试图ABC中就会有4条A的重复记录,有2条B的重复记录
如果D表中也有与A相关的记录2条,则试图ABCD中就会有8条A的重复记录,有4条B的重复记录,有2条C的重复记录这样就影响查询了。如果使用distinct,又只会保留一条有关A的记录,B、C、D表中的于A有关的其它多条记录就查询不出来
大家是怎么解决这个问题的?
建立视图AB A left jion B
建立视图ABC AB left join C
建立视图ABCD ABC left join C现在就从视图ABCD中查询但有个问题,就是B、C、D表中都有多条记录与A表中的记录关联,这样,在视图ABCD中A表中的记录就有了多条记录。
比如:
B中与A相关的有2条,则视图AB中就有2条A的重复记录,这不影响查询
但如果C中也有与A相关的记录2条,则试图ABC中就会有4条A的重复记录,有2条B的重复记录
如果D表中也有与A相关的记录2条,则试图ABCD中就会有8条A的重复记录,有4条B的重复记录,有2条C的重复记录这样就影响查询了。如果使用distinct,又只会保留一条有关A的记录,B、C、D表中的于A有关的其它多条记录就查询不出来
大家是怎么解决这个问题的?
1 A1
2 A2
3 A3table B
bid, aid, colB
1 1 B1
2 1 B2
3 3 B3此时 select * from a left join b on a.id=b.aid 肯定会出现A的重复。 关键是你期望的显示结果是什么?
A表: B表 C表 D表
id id id id
aid aid aid
name study work littercreate view AB as select A.*,B.study from A left join B where A.id=B.aid;
create view ABC as select AB.*,C.work from AB left join C where AB.id=C.aid;
create view ABCD as select ABC.*,D.work from ABC left join D where ABC.id=D.aid;
id name
1 chen
2 wangB表:
id aid study
1 1 高中
2 1 大专
3 2 初中
4 2 本科视图AB:
id name study
1 chen 高中
1 chen 大专
2 wang 初中
2 wang 本科表C:
id aid work
1 1 分公司
2 1 总公司
3 2 分公司
4 2 总公司视图ABC:
id name study work
1 chen 高中 分公司
1 chen 高中 总公司
1 chen 大专 分公司
1 chen 大专 总公司
2 wang 初中 分公司
2 wang 初中 总公司
2 wang 本科 分公司
2 wang 本科 总公司表D:
id aid litter
1 1 助工
2 1 工程师
3 2 技术员
4 2 助工视图ABCD:
id name study work litter
1 chen 高中 分公司 助工
1 chen 高中 分公司 工程师
1 chen 高中 总公司 助工
1 chen 高中 总公司 工程师
1 chen 大专 分公司 助工
1 chen 大专 分公司 工程师
1 chen 大专 总公司 助工
1 chen 大专 总公司 工程师
2 wang 初中 分公司 助工
2 wang 初中 分公司 工程师
2 wang 初中 总公司 助工
2 wang 初中 总公司 工程师
2 wang 本科 分公司 助工
2 wang 本科 分公司 工程师
2 wang 本科 总公司 助工
2 wang 本科 总公司 工程师
1 chen 高中 分公司 助工
1 chen 高中 分公司 工程师
1 chen 高中 总公司 助工
1 chen 高中 总公司 工程师那针对这些记录,你期望的结果是什么呢?
1 chen 高中 分公司 工程师
1 chen 高中 总公司 助工
1 chen 高中 总公司 工程师chen 到底是什么? 是 '助工' 还是 '工程师' ?
1 chen 高中 分公司 助工
1 chen 高中 分公司 工程师
1 chen 高中 总公司 助工
1 chen 高中 总公司 工程师你期望的结果是什么? 正确结果你手工是怎么统计出来的?
问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)