用LEFT OUTER JOIN查询在SQL中获得连续数零

2008-11-20    | |
打印本文章
RSS

导读:要解决这个问题,你只需要写一个LEFT OUTER JOIN查询(和以前一样)。你的查询和用"(+)"标记的旧版的外部连接一起,表面上允许rand_schedule行在没有……

关键词:Oracle SQL LEFT OUTER JOIN 连续数零

Rudy Limeback
Rudy Limeback,Oracle顾问。他从事数据库系统工作25年,自1987年开始从事基于SQL关系数据库,著有《实用网站数据库设计》一书,书中有大量关于SQL文章。
正在加载数据...

问:我有一个有关用综合连接语句在不同范畴获取行数值的问题:


select rs.stratum_id stratum,
       rs.treatment_group_id treatment_name,
       count(rs.patient_id) countz
  from rand_schedule rs, strata s, treatment_groups t
  where rs.stratum_id = s.stratum_id (+)
  and rs.treatment_group_id = t.treatment_group_id (+)
  and rs.status = 'U'
  group by rs.stratum_id, rs.treatment_group_id
  order by countz desc;

  该查询返回有行的三个stratum/treatment组合,但是没有返回没有行的一个组合。我尝试用对该值用NVL,但是根本就没有用,一旦碰到没有行的范畴它就停止运行程序。有没有一种办法能报告出那些没有行的值?

  答:是的,你只需要写一个LEFT OUTER JOIN查询(和以前一样)。你的查询和用"(+)"标记的旧版的外部连接一起,表面上允许rand_schedule行在没有strata或treatment_groups表匹配时还能存在。所以在有外键的时候当然就行不通。


SELECT rs.stratum_id            stratum
     , rs.treatment_group_id    treatment_name
     , COUNT(rs.patient_id)     countz
  FROM strata s
CROSS
  JOIN treatment_groups t
LEFT OUTER
  JOIN rand_schedule rs
    ON rs.stratum_id = s.stratum_id 
   AND rs.treatment_group_id = t.treatment_group_id 
   AND rs.status = 'U'
GROUP 
    BY rs.stratum_id
     , rs.treatment_group_id
ORDER 
    BY countz DESC;

  CROSS JOIN首先能够获取所有的strata和treatment_groups组合。然后,对所有这些组合中的每个组合都用LEFT OUTER JOIN找到rand_schedule表里相对应的行。如果没有这样的行存在的话,这些组合就当然要返回NULL。因此,COUNT集合函数就可以来计算这些组合,但是NULLs值不算在内,所以得到的结果就是零。

原文出处:http://searchoracle.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid41_gci1338359,00.html
作者:Rudy Limeback     译者:April    
  评论
相关的白皮书
 
如何创建数据连接?如何导出或导入数据库连接?怎样浏览数据库对象?本文针对上述几个问题详细介绍如何使用SQL Developer来操作Oracle数据库。
 
Oracle SQL Developer是一款怎样的工具?它具有什么功能?本文主要介绍如何使用SQL Developer来操作Oracle数据库。
 
如何查看手册?如何查找信息?如何使用Oracle数据库SQL参考手册?本文针对上述问题通过图例进行了详细阐述。
 
如何打开并保存SQL语句?如何输入并执行一个SQL脚本?本文侧重介绍使用SQL Developer执行SQL语句的过程中的这两个问题。
 
在使用SQL Developer执行SQL语句的过程中我们如何使用摘录窗口?如何处理语法错误?
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录