oracle的查询语句问题

现在有三张表,分别是用户的点餐表,缴费表,价格表,如何通过这三张表来更新余额表

2个回答

 create table 表A(
  id int,
  username varchar(20),
  payamount int
);
create table 表B(
  id int,
  username varchar(20),
  dishname varchar(100),
  amount int
);
create table 表C(
  id int,
  dishname varchar(100),
  price int
);
create table 余额表(
  id int,
  username varchar(100),
  left int
);
insert into 表A(id,username,payamount) values(1,'张三',30);
insert into 表A(id,username,payamount) values(2,'李四',33);
insert into 表A(id,username,payamount) values(3,'张三',60);


insert into 表B(id,username,dishname,amount) values(1,'张三','蛋炒饭',2);
insert into 表B(id,username,dishname,amount) values(2,'李四','牛肉面',2);
insert into 表B(id,username,dishname,amount) values(3,'张三','牛肉面',2);


insert into 表C(id,dishname,price) values(1,'蛋炒饭',8);
insert into 表C(id,dishname,price) values(2,'牛肉面',9);


insert into 余额表(id,username) values(1,'张三');

--查询结果
select a.username,a.PAYAMOUNT,b.usemount,a.PAYAMOUNT-b.usemount left from 
(select username,sum(PAYAMOUNT) PAYAMOUNT from 表A a group by username) a,
(
select username,sum((select price from 表c c where c.dishname=b.DISHNAME) * b.Amount) usemount 
from 表b b group by username
) b
where a.username = b.username

--更新数据
update 余额表 set left=(select a.PAYAMOUNT-b.usemount from 
(select username,sum(PAYAMOUNT) PAYAMOUNT from 表A a group by username) a,
(
select username,sum((select price from 表c c where c.dishname=b.DISHNAME) * b.Amount) usemount 
from 表b b group by username
) b
where a.username = b.username and a.username = 余额表.username)

如果没问题,记得采纳一下

danielinbiti
danielinbiti 回复zhangchun888: 连接,不明白,这是纯SQL,不和任何语言有关系
4 年多之前 回复
zhangchun888
csdn_user_info 回复danielinbiti: 不用进行数据库的连接操作么
4 年多之前 回复
danielinbiti
danielinbiti 回复zhangchun888: 和你的表一样呀,根据你的图来的呀
4 年多之前 回复
zhangchun888
csdn_user_info 你这边b.amount要对应的吧,请问该怎么解决呢
4 年多之前 回复
zhangchun888
csdn_user_info 虽然有些看不懂,不过我采纳了。。。
4 年多之前 回复

图片说明
如图

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!