首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

多表关连查询求教,该如何处理

2012-02-04 
多表关连查询求教表:A(用户编号,姓名)注:编号不重复表:B(用户编号,账号,金额,年度)注:编号不重复表:C(账号

多表关连查询求教
表:A(用户编号,姓名) 注:编号不重复
表:B(用户编号,账号,金额,年度) 注:编号不重复
表:C(账号,电话)

我想要以A表为基准,去关连查询其他信息。可是查出来的有重复,插入另一个表违反约束条件了。写法如下:

SQL code
select a.用户编号,a.姓名,b.账号,b.金额,c.电话from A,B,C where a.用户编号=b.用户编号 and b.账号=c.账号 and b.年度='2011'


帮忙看下,错在哪里,另外问一下 条件中的 (+) (-) 代表什么意思?

[解决办法]
要去掉重复首先你要先确定你表A,B,C之间的关系
你表B的主键是哪个,你表C是否有主键
如果表B有主键,且主键是用户编号的话,出现重复的值的话,那就是表C造成的,也就是说一个账号拥有多个电话

如果表B有主键,但主键是用户编号,账号,那就是表B造成的,也就是说一个用户允许有多个账号

如何去取舍那就看你数据的业务逻辑是什么样的了。
你说的连接表使用(+)这个符号解决不了你的问题,这只是外连接,还是会有重复的值的

最后说解决方法,你先确定你的业务逻辑是什么样的。
然后抽取数据,需要保存重复的值,使用哪种方法保存。
只能说这么多,你给的信息太少!
[解决办法]
按照LZ的说法,因为A表和B表的编号都是不重复的,那么应该就是C表出现重复了。
如果要以A表位基表,那么就用外连接连接B表,然后A,B表的字段去GROUP BY,C表的字段做MAX()或者其他处理,这样查询的结果就不会有重复了吧
SQL code
select a.用户编号,a.姓名,b.账户,b.金额,MAX(c.电话)  from A,(select * from B where 年度='2011') B,C where a.用户编号=b.用户编号(+) and b.账号=c.账号(+)group by a.用户编号,a.姓名,b.账户,b.金额
[解决办法]
根据这三张表,可以判断AB都不可能产生重复数据,可能C表有问题了,楼主可以随便看一下C表的数据,看有没有一个号多个电话的可能,消除重复,似乎有个关键字吧,distanct,好像是这么写吧,忘了,反正五张表中任何一张表有两条以上的数据且是同一关联外键的,都可能产生重复的查询结果。

热点排行
Bad Request.