oracle的查询语句问题

问题描述

oracle的查询语句问题

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

解决方案

 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)

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

解决方案二:


如图

解决方案三:

Oracle 查询语句
Oracle语句及查询结果
oracle 更新,查询语句 与约束问题

时间: 2024-12-31 02:25:35

oracle的查询语句问题的相关文章

注释-oracle sql查询语句优化

问题描述 oracle sql查询语句优化 各位大神,我想问下在生产PLSQL,将****内的注释以后,可以查询出结果(用时:16S秒),否则,SQL就一直处于执行状态,查询不出结果.在线等,求各位大神们解惑 select cs.P_VOICEDIAL_FLAG PVoicedialFlag cs.pri_card_nbr priCardNbr cs.total_bal totalBal cs.overdue_amount totalOdue cs.risk_score riskScore ci

Oracle分页查询语句(五)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询语句(二):http://yangtingkun.itpub.net/post/468/101703 Oracle分页查询语句(三):http://yangtingkun.itpub.net/post/468/104595 Oracle分页查询语句(四):http://yangtingku

Oracle分页查询语句(四)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询语句(二):http://yangtingkun.itpub.net/post/468/101703 Oracle分页查询语句(三):http://yangtingkun.itpub.net/post/468/104595 最后的例子说明内部循环包含排序的情况: SQL> CREATE T

Oracle分页查询语句(二)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 这篇文章用几个例子来说明分页查询的效率.首先构造一个比较大的表作为测试表: SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS, DBA_SEQUENCES; 表已创建. SQL> SELECT COUNT(*) FROM T; COUNT(*)--------

Oracle分页查询语句(三)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询语句(二):http://yangtingkun.itpub.net/post/468/101703 继续看查询的第二种情况,包含表连接的情况: SQL> CREATE TABLE T AS SELECT * FROM DBA_USERS; 表已创建. SQL> CREATE TABLE

Oracle分页查询语句(七)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询语句(二):http://yangtingkun.itpub.net/post/468/101703 Oracle分页查询语句(三):http://yangtingkun.itpub.net/post/468/104595 Oracle分页查询语句(四):http://yangtingku

Oracle分页查询语句(六)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询语句(二):http://yangtingkun.itpub.net/post/468/101703 Oracle分页查询语句(三):http://yangtingkun.itpub.net/post/468/104595 Oracle分页查询语句(四):http://yangtingku

Oracle分页查询语句简介

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40 和RN >= 21控制分页查询的每页的范围. 上面给出的这个分页查

Oracle分页查询语句(一)

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的范围. 上面给出的这个分页查询语句,