`

记一下较复杂的SQL

阅读更多

最近在应用中用到两张表:

XZ_VIEW_INDEX_SJFW :  主表

ACF_SYS_GWATTACH    :  正文/附件存储表

 

正文或附件都以Blob字段存于 正文/附件存储表 中,该表的FILE_ID字段与主表中的ZW(正文序号)或FJ(附件序号)相关联。但是主表中的ZW和FJ字段是VARCHAR型的,而 正文/附件存储表 中的FILE_ID字段是数值型的,并且,主表中的ZW,FJ两个字段有可能为空,也有可能是中文,所以不能直接使用关联来从三张表中查询记录。

现在要求就是用一个SQL查询数据,如果有ZW或FJ值,则需要从 正文/附件存储表 中把对应的正文或附件也取出来。

 

为了防止非数值型与数值型字段值进行比较导致出错,所以先写了个自定义函数用来判断一个值是否是数字:

CREATE OR REPLACE FUNCTION IsNum (p_in VARCHAR2) RETURN NUMBER AS
  val NUMBER;
BEGIN
  select NVL(length(translate(trim(p_in),' +-.0123456789',' ')),0) into val from dual;
  if val=0 then 
    return 1;
  else
    return 0;
  end if;
END IsNum;

 

然后费了九牛二虎之力拼凑出一个SQL,在这里记一下,防止忘记:

--发文随机抽样
select * from ( 
  select 
      A.MODULE_CODE,
      A.BIZ_CODE,
      A.OP_TYPE,
      A.LASTTIME,
      A.BT,
      A.WH,
      A.ZTC,
      A.CYCL,
      A.SJ,
      A.ZW, 
      A.FJ,
      decode(isNum(A.ZW), 1,  B.EXT_NAME, -1) "正文扩展名", 
      decode(isNum(A.ZW), 1,  B.FILE_NAME, -1) "正文文件名", 
      decode(isNum(A.ZW), 1,  B.FILE_CONTENT,  empty_blob()) "正文",
      decode(isNum(A.FJ), 1,  C.EXT_NAME, -1) "附件扩展名",
      decode(isNum(A.FJ), 1,  C.FILE_NAME, -1) "附件文件名", 
      decode(isNum(A.FJ), 1,  C.FILE_CONTENT, empty_blob()) "附件"
  from UA.XZ_VIEW_INDEX_SJFW A, UB.ACF_SYS_GWATTACH B, UB.ACF_SYS_GWATTACH C
    where B.FILE_ID(+)=decode(isNum(A.ZW), 1, A.ZW, null) 
      and C.FILE_ID(+)=decode(isNum(A.FJ), 1, A.FJ, null)
  order by dbms_random.value
) 
where rownum <= 10

 

分享到:
评论

相关推荐

    sql生成助记码函数.txt

    根据提供的文件信息,我们可以分析并总结出以下关于SQL生成助记码函数的知识点: ### SQL生成助记码函数概述 该SQL脚本定义了一个名为`fn_GetPy`的函数,其功能是将输入的字符串转换为助记码(PinYin首字母缩写)...

    oracle消耗资源的sql查询语句记录

    - **SQL Trace**:通过启用SQL跟踪功能,可以收集更为详细的SQL执行轨迹信息,这对于诊断复杂的性能问题非常有帮助。 - **ASH/AWR**:活动会话历史(Active Session History)和自动工作负载资料库可以帮助追踪...

    SQL Server遍历表中记录的2种方法(使用表变量和游标)

    在SQL Server中,遍历表中的记录是数据库操作中常见的一种任务,特别是在处理逐行处理数据或执行复杂逻辑时。本文将深入探讨两种方法:使用表变量和使用游标。 首先,我们来看如何通过表变量来遍历记录。表变量在...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 ...

    SQL 执行超长语句

    2. **数据清洗**:对于需要根据特定规则对数据进行清洗的应用场景,可能会使用到包含多个CASE WHEN语句的复杂SQL语句。 3. **报表生成**:生成复杂的报表时,往往需要从多个表中抽取数据并进行复杂的联接操作,从而...

    My SQL and SQL Sever 对比

    SQL Server 的性能也很高,但是需要付出一些代价,如增加额外的复杂操作和磁盘存储。 3. 安全性: MySQL 有一个用于改变数据的二进制日志,可以快速地从主机上复制数据到客户机上。 SQL Server 也可以记录 SQL 的...

    SQLServer-sql查询入门

    - **适用范围**:虽然本教程基于较旧版本的SQL Server 6.5(1997年发布),但其中的基本概念和操作仍然适用于现代版本。 #### 二、SQL基础知识 - **SQL的重要性**:对于从事网站开发或维护数据库的人来说,熟练掌握...

    sqlmon 可以监控delphi编写的程序访问sql server的脚本

    - 性能分析:通过分析执行时间,SQLMON可以帮助识别性能瓶颈,找出耗时较长的查询进行优化。 - 错误检测:当SQL语句执行出错时,SQLMON会捕获错误信息,有助于快速定位问题所在。 - 数据库事务跟踪:可以追踪事务...

    SQL Server SQL优化

    - **不推荐做法**:使用复杂的日期运算,如`SELECT id FROM A WITH (NOLOCK) WHERE DATEDIFF(hh, time, GETDATE()) 。 ##### 5. 排序与去重的优化 在使用`GROUP BY`、`DISTINCT`和`ORDER BY`等操作时,应当尽可能...

    sql processing with sas system(SAS中sql应用)

    由于SAS SQL采用了标准SQL语法,因此对于已经熟悉SQL的人来说,学习成本较低。此外,SAS还提供了丰富的文档和支持资源,使得新手也能快速上手。 **4.2 高效的数据处理能力** SAS SQL能够处理大量数据,并且通过...

    删除表中重复数据sql语句

    这是一种较传统的处理方式,适用于数据量较小的情况: ```sql DECLARE @max INTEGER, @id INTEGER; DECLARE cur_rows CURSOR LOCAL FOR SELECT 主字段, COUNT(*) FROM 表名 GROUP BY 主字段 HAVING COUNT(*) &gt; 1; ...

    sql分页 sqlserver中存储过程分页

    - **动态SQL构造**:此存储过程通过动态拼接 SQL 字符串的方式来实现复杂的分页逻辑,这使得其具有较高的灵活性。 - **TOP 关键字的使用**:利用 SQL Server 的 TOP 关键字来限制返回的记录数量。 - **子查询与嵌套...

    ORACLE并行SQL指南

    - **并行查询**:在并行查询中,一个复杂的SQL语句被分解成多个较小的子任务,这些子任务可以由不同的进程同时执行。例如,在进行大表扫描时,可以将表分成多个分区,每个分区由一个独立的进程处理。 - **并行DDL...

    SQL server语法教程

    - **SQL的复杂性**:虽然本书提供了一些基本的SQL知识,但实际上SQL是一门非常复杂的语言,拥有众多高级特性和用法。 - **深入学习资源**:对于希望更深入学习SQL的读者,推荐参考Microsoft SQL Server相关的书籍和...

    迷你Sql2000,迷你数据库

    迷你SQL2000是一款专为用户设计的轻量级、免安装的数据库管理系统,尤其适合于对系统资源要求较低且需要快速部署的环境。它继承了Microsoft SQL Server 2000的核心功能,但体积小巧,易于使用,是个人工作和小型项目...

    SQL Server数据库查询速度慢原因及优化方法

    例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...

    navicat for sqlserver

    在资源占用方面,Navicat for SQL Server 设计得相当轻量级,即使在较低配置的计算机上也能流畅运行,不会对系统性能造成太大影响。 总的来说,Navicat for SQL Server 是一个功能全面、易于使用的数据库管理工具,...

    基于复杂SQL查询自动汇总表的应用研究.pdf

    本文主要探讨了基于复杂SQL查询的自动汇总表的应用研究,旨在提高数据库在处理海量数据以及复杂查询时的性能和响应速度。文章围绕着QGM(Query Graph Model)模型和AST(Automatic Summary Table,自动累加表)的...

    SQL Server快速获得记录总数的方法.pdf

    这种方法简单易用,无需编写复杂的SQL查询语句,因此在开发和维护数据库系统的应用中被广泛采用。但这种方法有一个显著的缺陷,即当表中的记录数非常大时,执行速度会非常慢。例如,在一个包含100万记录的表上执行该...

    SQL.rar_SQL语句_sql server

    6. **开发工具**:SQL Server提供集成的开发环境SSMS(SQL Server Management Studio),支持复杂的脚本编写和调试。Access虽然也有自己的设计工具,但在复杂应用开发方面不如SQL Server。 7. **扩展性**:SQL ...

Global site tag (gtag.js) - Google Analytics