oracle三表联合查询

表a:订单表order订单号sheetid供应商号companyid下单日期ordertimeA0000010012014/6/15A0000020022014/6/15... 表a:订单表 order
订单号 sheetid 供应商号 companyid 下单日期 ordertime
  A000001     001      2014/6/15
  A000002     002      2014/6/15

表b:订单商品表 orderitem
订单号 sheetid 商品号 productid 订货数量 number
  A000001   000006      5
  A000001   000005      2
  A000001   000004      1
  A000002   000001      2
  A000002   000002      2
  A000002   000003      2

表c:商品信息表 product
商品号 productid 商品名 name 更新日期 updatetime
  000001    商品A    2014/5/15
  000002    商品B    2014/5/15
  000003    商品C    2014/5/15
  000004    商品D    2014/5/15
  000005    商品E    2014/5/15
  000006    商品F    2014/5/15
  000002    商品B    2014/6/1
  000004    商品D    2014/6/1
.......
(还有很多数据,同一个商品的信息经常更新)

想联通过sheetid把表a和表b关联,通过productid把表b和表c关联
达到补充表2的数据内容的目的,希望最终展示的字段为:
b.sheetid b.productid c.name b.number a.companyid a.ordertime

现在用的语句:
select distinct * from
(select b.sheetid,b.productid,c.name,b.number,a.companyid,a.ordertime
from order a left join orderitem b on a.sheetid = b.sheetid left join product c on b.productid = c.productid) total
where to_char(total.createtime,'yyyy-mm-dd')='2014-06-15'

表b的数据只有6行,但是用上面的语句显示的结果有9行(有3行重复数据),而且没用distinct函数之前查出的结果更多。
不知道是因为表c中同一个商品更新了太多次,还是我的语句有问题,望大侠指点!
展开
 我来答
千锋教育
2018-07-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
以oracle使用rownum伪列实现分页为例:
三表连接分页示例代码如下:
select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB k,CJB cj,XSB x where k.kch = cj.kch and cj.xh = x.xh and rownum<=10) where r>0

特别注意这样外层查询时由于内层查询的字段有重复列名,所以内层查询最后不要用*。取完每一个表字段,这样很容易报错(“无效字段”)
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
wjm0506
推荐于2018-02-28 · TA获得超过147个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:174万
展开全部

大哥你以B为主表查啊。。以A去LEFT JOIN肯定会多的!

select b.sheetid,b.productid,c.name,b.number,a.companyid,a.ordertime
from orderitem b left join order a on b.sheetid = a.sheetid left join product c on b.productid = c.productid
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式