查询语句的写法

华丽的原型 2009-11-20 11:19:56
A表字段
HZSBGUID(汇总设备编号)
SL(数量)
ZJ(总价)

B表字段
HZSBGUID(汇总设备编号)

C表字段
HZSBGUID(汇总设备编号)
WZGUID

D表字段
WZGUID

C表和A表的HZSBGUID是B表HZSBGUID的外键,C表的WZGUID是D表的WZGUID的外键,现在只知道WZGUID,想查找对应的A表的SL和ZJ的总数,查询语句是不是这么写:

SELECT sum(SL), sum(ZJ) from A,B,C,D where A.HZSBGUID = B.HZSBGUID and B.HZSBGUID = C.HZSBGUID and D.WZGUID = HZSBGUID

还是有什么更有效率的写法?
...全文
127 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2009-11-20
  • 打赏
  • 举报
回复
SELECT sum(SL), sum(ZJ) from A,C where A.HZSBGUID = C.HZSBGUID and c.WZGUID = :HZSBGUID

c.WZGUID ,忘了改了
原语句会原语句少了c和d的关联,会产生笛卡尔积
小灰狼W 2009-11-20
  • 打赏
  • 举报
回复
c表的2个字段是1对多,HZSBGUID不会重复,2表连接即可
就用你的语句,去掉两个不需要的表

SELECT sum(SL), sum(ZJ) from A,C where A.HZSBGUID = C.HZSBGUID and D.WZGUID = :HZSBGUID
小灰狼W 2009-11-20
  • 打赏
  • 举报
回复
不需要关联b和d表
select sum(sl),sum(zj) from a
where exists(select 1 from c
where HZSBGUID=a.HZSBGUID
and WZGUID=xxx)--xxx代表指定的WZGUID值
hebo2005 2009-11-20
  • 打赏
  • 举报
回复
没有
zkl516321905 2009-11-20
  • 打赏
  • 举报
回复
要查询的是A表和B表的内容啊,先从首要条件就查询出满足A和B中要的那些内容,其他的都排除,然后再来根据WZGUID 来找
小灰狼W 2009-11-20
  • 打赏
  • 举报
回复
那就在你的原语句上增加些条件就好了
SELECT b.HZSBGUID,b.dw,b.xh,sum(a.SL), sum(a.ZJ)
from A,B,C,D
where A.HZSBGUID = B.HZSBGUID
and B.HZSBGUID = C.HZSBGUID
and D.WZGUID = C.WZGUID
and d......--过滤条件
group by b.HZSBGUID,b.dw,b.xh
华丽的原型 2009-11-20
  • 打赏
  • 举报
回复
是的。而且过滤的条件不是D表的WZGUID,而是D表另外的字段,目前使用的是D表的录入时间进行过滤的。。。。
小灰狼W 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jacobspring 的回复:]
新情况,查出来的数据需要B的一些其他字段:DW(单位)、XH(序号),因此似乎B表还是省不了啊
[/Quote]
那么这两个新增的字段要怎么处理?
需要按HZSBGUID分组?
华丽的原型 2009-11-20
  • 打赏
  • 举报
回复
新情况,查出来的数据需要B的一些其他字段:DW(单位)、XH(序号),因此似乎B表还是省不了啊

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧