我想将一个新列合并到一个有效的 SQL 查询中。
但是,它会导致整个查询根本不返回任何内容(因为该列在数据库中大部分为空)。
到目前为止,这是我的精简代码:
SELECT DISTINCT submittedRow.PERFORMED_DATE as "submitted",
supervisorRow.PERFORMED_DATE as "superv",
/* coalesce(sodRow.PERFORMED_DATE, TO_DATE('2000/07/07', 'YYYY/MM/DD') ) */ null AS "SOD"
hhs_umx_resp_activity submittedRow
join hhs_umx_resp_activity supervisorRow ON supervisorRow.reg_request_id = configRow.reg_request_id
/* join hhs_umx_resp_activity sodRow ON sodRow.reg_request_id = approvedRow.reg_request_id */
left join HHS_UMX_REG_REQUESTS hurr on hurr.reg_request_id = hur.reg_request_id
WHERE
and supervisorRow.ACTIVITY_RESULT_CODE = 'ASP'
AND submittedRow.activity_result_code = 'SBT'
/* AND sodRow.activity_result_code = 'ASD'*/
and hur.REG_REQUEST_ID IN ('262097')
我想添加的大部分为空的列是sodRow
(这就是代码AND sodRow.activity_result_code = 'ASD'
被注释的原因)。
每当我放回额外的 join forsodRow
时,它只会将所有内容都归零,而我根本没有得到任何结果。但我希望它像NVL
or一样工作COALESCE
,如果它存在,它只显示该列,否则只显示其他所有内容。
我尝试先在代码中创建一个视图,然后再对其进行操作UNION
。但似乎视图仅适用于 PL/SQL 代码。
我也尝试了外部连接,但这不起作用。
我认为问题可能出在WHERE
我的加入代码的情况下。我确实喜欢 Dmitri 建议 belwo :
AND nvl(sodRow.activity_result_code, 'ASD') = 'ASD'
AND nvl(configRow.activity_result_code, 'ACL') = 'ACL'
或者:问题是它不会返回任何行。IE 如果我们正在寻找“ACL”,那么之前对“ASD”的检查变为真,并且会使下一次检查无用。
我想我只是无法想象连接是如何在这里工作的
, 谢谢 !