query 1:SELECT B.CASE_NO, B.EMPLID, B.NAME
FROM STW_BTRIP_DETAIL B
WHERE B.TRANSACTIONAL_STATUS ='A'
AND B.PRINT_FLAG IS NULL query 2:
SELECT B.CASE_NO, B.EMPLID, B.NAME, CORP.corp_gst, CASH.cash_gst
FROM STW_BTRIP_DETAIL B,
(SELECT ca.case_no, sum(cg.gst) as corp_gst FROM STW_CORP_CARD_DETAILS ca ,STW_CORP_CARD_GST_DETAILS cg WHERE ca.EMPLID = cg.EMPLID(+) AND ca.ACCT_NUM = cg.ACCT_NUM(+) AND ca.POST_DT = cg.POST_DT(+) AND ca.TRAN_SEQ_NUM = cg.TRAN_SEQ_NUM(+) GROUP BY ca.case_no) CORP,
(SELECT case_no ,sum(gst) as cash_gst FROM stw_btrip_official_cash GROUP BY case_no) CASH
WHERE B.TRANSACTIONAL_STATUS ='A'
AND B.PRINT_FLAG IS NULL
AND B.case_no = CORP.case_no(+)
AND B.case_no = CASH.case_no(+)
执行的结果是2的返回集比1小,照我的想法,因为是left outer join,不管corp和cash这两个临时表里有没有数据,2的查询结果都应该和1相同.请问是哪种情况下,2的返回集合比1小呢? 我想返回和1相同大小的集合,该怎么办? 谢谢.
FROM STW_BTRIP_DETAIL B
WHERE B.TRANSACTIONAL_STATUS ='A'
AND B.PRINT_FLAG IS NULL query 2:
SELECT B.CASE_NO, B.EMPLID, B.NAME, CORP.corp_gst, CASH.cash_gst
FROM STW_BTRIP_DETAIL B,
(SELECT ca.case_no, sum(cg.gst) as corp_gst FROM STW_CORP_CARD_DETAILS ca ,STW_CORP_CARD_GST_DETAILS cg WHERE ca.EMPLID = cg.EMPLID(+) AND ca.ACCT_NUM = cg.ACCT_NUM(+) AND ca.POST_DT = cg.POST_DT(+) AND ca.TRAN_SEQ_NUM = cg.TRAN_SEQ_NUM(+) GROUP BY ca.case_no) CORP,
(SELECT case_no ,sum(gst) as cash_gst FROM stw_btrip_official_cash GROUP BY case_no) CASH
WHERE B.TRANSACTIONAL_STATUS ='A'
AND B.PRINT_FLAG IS NULL
AND B.case_no = CORP.case_no(+)
AND B.case_no = CASH.case_no(+)
执行的结果是2的返回集比1小,照我的想法,因为是left outer join,不管corp和cash这两个临时表里有没有数据,2的查询结果都应该和1相同.请问是哪种情况下,2的返回集合比1小呢? 我想返回和1相同大小的集合,该怎么办? 谢谢.
解决方案 »
- alter database clear logfile group 会否导致数据库恢复时数据丢失
- 这样sql怎么写啊?各位帮看看
- 求助 。。。帮忙看下有啥问题。。。。。。
- 有部门表,人员表,在部门下有人跟部门同时属于同一部门的关系,问能否查找到部门下有人的部门(过滤掉没人的部门)?
- 触发器问题----在线等
- (急急急急急急急急急急急急急急急急急)Oracle监听器问题
- 删除出错
- 存储过程中,怎样实现插入一个不定长的结构数组?
- 在OMS中登录数据库提示错误?
- 请教怎么让ORACLE表内ID记录自动增长向sql server内的一样?
- 安装oracle 10 as 报错
- 急,高手帮我看看这个问题?
我个人也认为2的结果条数应该要大于等于1的结果条数。
(如果有理论证明这个观点是错误的,那么下面的也没必要分析)我觉得你尝试自己分析一下,问题的关键是要找出2比1少了哪些数据。SELECT oa.case_no, ob.case_no
FROM (SELECT b.case_no, b.emplid, b.NAME
FROM stw_btrip_detail b
WHERE b.transactional_status = 'A' AND b.print_flag IS NULL) oa,
(SELECT b.case_no, b.emplid, b.NAME, corp.corp_gst, cash.cash_gst
FROM stw_btrip_detail b,
(SELECT ca.case_no, SUM (cg.gst) AS corp_gst
FROM stw_corp_card_details ca,
stw_corp_card_gst_details cg
WHERE ca.emplid = cg.emplid(+)
AND ca.acct_num = cg.acct_num(+)
AND ca.post_dt = cg.post_dt(+)
AND ca.tran_seq_num = cg.tran_seq_num(+)
GROUP BY ca.case_no) corp,
(SELECT case_no, SUM (gst) AS cash_gst
FROM stw_btrip_official_cash
GROUP BY case_no) cash
WHERE b.transactional_status = 'A'
AND b.print_flag IS NULL
AND b.case_no = corp.case_no(+)
AND b.case_no = cash.case_no(+)) ob
WHERE oa.case_no = ob.case_no(+) AND ob.case_no IS NULL然后再在2中分析少这些数据的原因。
在进行分析前,可以先确认下以下几个问题:1)1和2是在同一个session中执行的吗?如果不是,是否1中有未提交的数据?2)各表中的case_no是否存在NULL值?
所以会少