ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 1014|回复: 6

[SQL] 请教一个类似判断语句的写法

[复制链接]
认证徽章
论坛徽章:
8
秀才
日期:2017-09-18 17:01:40秀才
日期:2018-01-02 15:05:22秀才
日期:2018-01-02 15:13:25秀才
日期:2018-01-02 15:13:38秀才
日期:2018-01-02 15:13:38技术图书徽章
日期:2018-01-02 15:13:47秀才
日期:2018-01-02 15:35:05秀才
日期:2018-01-02 15:35:30
跳转到指定楼层
1#
发表于 2017-12-21 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据库:11.2.0.3
我现在有个想法,语句需求如下:
select * from (select case
                         when (select count(*)
                                       from pc  inner join a
                                           on pc.cnt_content=a.id
                                     where pc.floor_node_id='201712200674'   
                                         and pc.group_id='4')=0            
                           then ad.name
                           else
                           (select a.name
                                       from pc  inner join a
                                           on pc.cnt_content=a.id
                                     where            pc.floor_node_id='201712200674'   
                                         and pc.group_id='4')
                           end as addressname

                           from ad left join m
                                on ad.id=m.province
                                       left join mc
                                 on ad.id=mc.city  
                                       left join t
                                 on m.prod.id=t.matrt_id
                              where m.province is not null and t.status in ('2','4') group by ad.name        
                     ) ac  order by  ac.addressname


帮忙指点一下!多谢!nvl判断null可否在这里使用?
来自安卓客户端来自客户端
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
2#
发表于 2017-12-21 13:55 | 只看该作者
没太明白楼主的意思,但这个语句逻辑上是有问题的。

使用道具 举报

回复
认证徽章
论坛徽章:
8
秀才
日期:2017-09-18 17:01:40秀才
日期:2018-01-02 15:05:22秀才
日期:2018-01-02 15:13:25秀才
日期:2018-01-02 15:13:38秀才
日期:2018-01-02 15:13:38技术图书徽章
日期:2018-01-02 15:13:47秀才
日期:2018-01-02 15:35:05秀才
日期:2018-01-02 15:35:30
3#
发表于 2017-12-21 14:43 | 只看该作者
sqysl 发表于 2017-12-21 13:55
没太明白楼主的意思,但这个语句逻辑上是有问题的。

就是判断下面这个语句,
(select count(*)
                                       from pc  inner join a
                                           on pc.cnt_content=a.id
                                     where pc.floor_node_id='201712200674'   
                                         and pc.group_id='4')
如果为0,即count(*)为0,则case的结果为ad.name(该结果为后面三表关联查询的结果),如果count(*)不为0,则返回该条件的结果:
(select a.name
                                       from pc  inner join a
                                           on pc.cnt_content=a.id
                                     where pc.floor_node_id='201712200674'   
                                         and pc.group_id='4')
来自安卓客户端来自客户端

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
4#
发表于 2017-12-21 14:48 | 只看该作者
gangade 发表于 2017-12-21 14:43
就是判断下面这个语句,
(select count(*)
                                       from pc  inner join ...

如果count(*)不为零,也可能存在多条记录,那样会报错的。

使用道具 举报

回复
论坛徽章:
486
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
5#
发表于 2017-12-21 22:30 | 只看该作者
可以在NVL中使用标量子查询。
NVL((select a.name
                                       from pc  inner join a
                                           on pc.cnt_content=a.id
                                     where            pc.floor_node_id='201712200674'   
                                         and pc.group_id='4'), ad.name)

但要注意返回多于一行的情况,你原写法就有这个问题。除非你的查询条件是用在唯一索引上。如果确定所有返回数据都相同也可以加上AND ROWNUM=1

使用道具 举报

回复
认证徽章
论坛徽章:
8
秀才
日期:2017-09-18 17:01:40秀才
日期:2018-01-02 15:05:22秀才
日期:2018-01-02 15:13:25秀才
日期:2018-01-02 15:13:38秀才
日期:2018-01-02 15:13:38技术图书徽章
日期:2018-01-02 15:13:47秀才
日期:2018-01-02 15:35:05秀才
日期:2018-01-02 15:35:30
6#
发表于 2017-12-22 07:40 | 只看该作者
sqysl 发表于 2017-12-21 14:48
如果count(*)不为零,也可能存在多条记录,那样会报错的。

谢谢指点,已发现这个问题
来自安卓客户端来自客户端

使用道具 举报

回复
认证徽章
论坛徽章:
8
秀才
日期:2017-09-18 17:01:40秀才
日期:2018-01-02 15:05:22秀才
日期:2018-01-02 15:13:25秀才
日期:2018-01-02 15:13:38秀才
日期:2018-01-02 15:13:38技术图书徽章
日期:2018-01-02 15:13:47秀才
日期:2018-01-02 15:35:05秀才
日期:2018-01-02 15:35:30
7#
发表于 2017-12-22 07:41 | 只看该作者
newkid 发表于 2017-12-21 22:30
可以在NVL中使用标量子查询。
NVL((select a.name
                                       from pc  inn ...

多谢版主指点
来自安卓客户端来自客户端

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

DTCC2018购票6.8折优惠进行时

中国数据库技术大会是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会。 2018年5月10-12日,第九届中国数据库技术大会将如约而至。本届大会以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨Oracle、MySQL、NoSQL、大数据等领域的前瞻性热点话题与技术。
----------------------------------------
优惠时间:2018年2月13日前

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
北京赛车pk10 申博官网 北京赛车pk10 六台宝典现场开奖 北京赛车pk10历史记录 北京赛车开奖 北京赛车预测 949494开奖结果今晚 威尼斯人线上娱乐 手机投注平台 幸运28投注技巧 pk10助赢软件 北京pk10百度鼎盛彩票网 北京赛车聚彩 北京pk10如何稳杀3码 pk10稳赢方法 pk10定位计划 pk10包赢计划群