12
返回列表 发新帖
楼主: test_100

[SQL] 一定使用TO_CHAR(但不走索引),有啥好的解决方法吗?

[复制链接]
论坛徽章:
16
ERP板块每日发贴之星
日期:2007-08-24 01:03:56秀才
日期:2017-03-02 10:30:14ITPUB14周年纪念章
日期:2015-10-26 17:23:44处女座
日期:2015-09-11 10:28:03狮子座
日期:2015-09-10 09:07:23喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49
11#
 楼主| 发表于 2017-11-22 11:15 | 只看该作者
newkid 发表于 2017-11-21 22:31
索引也可以建两个,因为有时候也要查NUMBER型条件的。
如果改设计,不建议修改左边的类型,而是要改右边 ...

“新增一个NUMBER列,专门来存放这个连接键。",这就是虚拟列吗?这也是一种不错的方法~

使用道具 举报

回复
论坛徽章:
16
ERP板块每日发贴之星
日期:2007-08-24 01:03:56秀才
日期:2017-03-02 10:30:14ITPUB14周年纪念章
日期:2015-10-26 17:23:44处女座
日期:2015-09-11 10:28:03狮子座
日期:2015-09-10 09:07:23喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49
12#
 楼主| 发表于 2017-11-22 11:25 | 只看该作者
本帖最后由 test_100 于 2017-11-22 11:27 编辑
newkid 发表于 2017-11-21 22:27
在外层用WHERE把纯数字的过滤出来。然后里面就可以用TO_NUMBER了。

脚本是这样的:


  1. Select (Select hx.name
  2.           From hk_xx hx
  3.          where hk.km_id = sa.pur_str_id
  4.            And rownum = 1
  5.          union all
  6.         Select bs.name
  7.           From b_ss bs
  8.          Where to_char(bs.str_id) = sa.pur_str_id
  9.            And rownum = 1) Name
  10.   From hpt_xx sa;
复制代码

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
13#
发表于 2017-11-22 23:09 | 只看该作者

外面的From hpt_xx sa竟然没有任何WHERE条件?全表输出?
标量子查询里面有UNION ALL,你那么确定只会得到一行结果?超过一行就报错了。

看起来pur_str_id被用作多种用途,有时候表示一个km_id, 有时候又表示str_id, 这种设计是错误的,一个列就必须有明确的含义,你上述的数据本来就应该分成两列。要不然,完全有可能一个pur_str_id在两表同时存在,你的UNION ALL就会返回两行了。

使用道具 举报

回复
论坛徽章:
16
ERP板块每日发贴之星
日期:2007-08-24 01:03:56秀才
日期:2017-03-02 10:30:14ITPUB14周年纪念章
日期:2015-10-26 17:23:44处女座
日期:2015-09-11 10:28:03狮子座
日期:2015-09-10 09:07:23喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49
14#
 楼主| 发表于 2017-11-23 10:12 | 只看该作者
newkid 发表于 2017-11-22 23:09
外面的From hpt_xx sa竟然没有任何WHERE条件?全表输出?
标量子查询里面有UNION ALL,你那么确定只会得 ...

# 外面的From hpt_xx sa 是一天的数据,大概3W笔,走的是全表。
# km_id 是字符,以A,E打头。str_id 是纯数字。
# 是的,在设技上有点问题。我想办法优化。
# 非常感谢~

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表