sql新手求助,下面这段要达到什么目的?(+)什么意思?
select count(*) from
(select distinct id from pids where id='abc') a,
(select distinct id from pids where id='abc' where nvl(b64,0)=1) b,
(select distinct id from pids where id='abc' where nvl(b64,0)<>0) c
where a.id=b.id(+) and a.id=c.id(+) and b.id is not null and c.id is null
sql新手求助,下面这段要达到什么目的?(+)什么意思? select count(*) from (
答案:2 悬赏:40 手机版
解决时间 2021-01-29 06:38
- 提问者网友:暗中人
- 2021-01-28 20:48
最佳答案
- 五星知识达人网友:轻雾山林
- 2021-01-28 21:03
简单来说是求和,将pids表中id字段且条件为id=abc的数据去重并查询出数量后命名为a,再将pids表中id字段条件是id为abc且=1的数据去重并查询出数量后命名为b,再将pids表中id字段条件为id=abc且≠0的数据去重并查询出数量后命名为c,最后有一个查询的总条件为a的id字段等于b的id字段(+表示外链接,因为a,b,c为三个表)且等于c的id字段且b的id不为空,且c的id为空。(咳咳,我怎么觉得这代码怪怪的,这是要查啥数据啊,这么纠结,可能有错误,表怪我,谢谢)
全部回答
- 1楼网友:爱难随人意
- 2021-01-28 22:39
字段名,表名,数据库名之类作为变量时,必须用动态sql
eg:
declare @fname varchar(20)
set @fname = 'filedname'
select @fname from tablename -- 错误,不会提示错误,但结果为固定值filedname,并非所要。
exec('select ' + @fname + ' from tablename') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'filedname' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tablename'
exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tablename'
exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
就写这么多了!希望对你有所帮助
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯