sql大神帮忙解决一下,为什么目标表w无效,但在存储过程里可以正常跑过,页面运行却抛错

selecta.1,(100/(selectCOUNT(w.2)fromw))fromaleftjoin(selectb.1,b.2frombunionselectc.1... select a.1,
(100/(select COUNT(w.2)from w ))
from a
left join (select b.1,b.2 from b
union select c.1,c.2 from c
) as w on w.1=a.1
展开
 我来答
紫仑天玑
2013-07-12 · 萝卜数学关注思维过程
紫仑天玑
采纳数:324 获赞数:888

向TA提问 私信TA
展开全部
你让我想起一句话,革命尚未成功,同志还需努力。
---------------------------------------------------------------
其实我不想回答你的问题的,主要是问题过于基础,抢答的一片人。主要是后面那个我挺喜欢。

select COUNT(w.2) from w 这个 明显是个错误,w 如果是存在的表 那一定要用别名才用能w.2的方式,如果是
(select b.1,b.2 from b
union select c.1,c.2 from c
) as w 这个的话,那就更错了,
sql 执行的第一步就是集合构建,

100/(select COUNT(w.2)from w ) 而这个是 子查询,在最后输出执行的,也就是说,

w 作为额外的表解析了,所以作为未知数据源提示给你错误!

存储过程在创建时不对表的存在性和 核心语法区进行校验,因为微软认为在执行的时候验证就足够了,所以存储过程只验证基本格式语法。

-----
记住sql 基本的执行顺序!
更多追问追答
追问
那个w表示不存在,只是a表和B表里面字段1和2组成的重命名表,w表只有字段1和2,而我想要的字段是100除以w字段2里面数据的条数,也就是A表和B表里面字段2的数据条数的和,那怎么样写才正确·····求解啊!大虾
追答



sqlserver独特的with 临时表就可以了!


相当于

select 
TA.a as Qum
,(100/(select COUNT(b) from (
select a,b from TB
union 
select a,b from TC
)w)) as Rate
from TA 
left join (
select a,b from TB
union 
select a,b from TC
)w on w.a=TA.a

但是with 高效一些。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式