SQL语句视图的创建问题

创建一视图,能够显示所有货物的gno(编号)、name(名称)、unit(单位)、现有数量。createviewkanasselectgno,name,unit,(sel... 创建一视图,能够显示所有货物的gno(编号)、name(名称)、unit(单位)、现有数量。
create view kan
as
select gno,name,unit,(select sum(amount)
from goods_in
where goods_in.gno=goods.gno)-(select sum(amount)
from goods_out
where goods_out.gno=goods.gno) total
from goods

create view kan
as
select gno,name,unit,(select sum(amount) from goods_in group by gno having goods_in.gno=goods.gno)-(select sum(amount) from goods_out group by gno having goods_out.gno=goods.gno) total from goods;
你们看看这两个语句一个意思吗?
展开
 我来答
wangzhiqing999
推荐于2017-10-13 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3346万
展开全部
手工把你的2个SQL语句格式化一下以后

create view kan
as
select
gno,
name,
unit,
( select sum(amount)
from goods_in
where goods_in.gno=goods.gno
)-
( select sum(amount)
from goods_out
where goods_out.gno=goods.gno
) total
from goods

create view kan
as
select
gno,
name,
unit,
( select sum(amount)
from goods_in
group by gno
having goods_in.gno=goods.gno
)-
( select sum(amount)
from goods_out
group by gno
having goods_out.gno=goods.gno
) total
from goods;

发现差异在于,后面一个的 子查询里面 having 使用的不正确。

select sum(amount)
from goods_in
group by gno
having goods_in.gno=goods.gno

一般 having 是用于针对 分组统计后 的数据,进行进一步筛选的处理。
例如
having sum(amount) > 100
这种,在分组之前,无法用 WHERE 语句来筛选的。

而你这个SQL
having goods_in.gno=goods.gno
这个 goods_in.gno=goods.gno 是不需要分组以后,才能作筛选处理的。
分组处理以前的 where 就可以处理了。
迟歌校海瑶
2019-01-05 · TA获得超过1024个赞
知道小有建树答主
回答量:1789
采纳率:100%
帮助的人:8.5万
展开全部
限定的是,数据的改变,不能超出WITH
CHECK
OPTION所约束的范围
在DELETE时,不管有不有这个WITH
CHECK
OPTION,
子查询
中的记录是都可以删除的,子查询以外的记录是不会变化的。
而INSERT和UPDATE时,WITH
CHECK
OPTION作用就比较明显了。如果修改的数据,不符合WITH
CHECK
OPTION的限制,是会报错,不被修改的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式