我有一個案例表和一個子表 case_status。早期的 case_status 是必填欄位,但不再是。所以我不得不從加入改為左外加入。添加此連接條件后,當 case_status 表沒有案例記錄時,記錄不會被拾取。case_status 有一個對 lkp_case_status 的查找,因此即使在那里也有一個外連接。我的查詢看起來像這樣
select c.* from cases c
left outer join (SELECT case_id,
case_status_id,
COUNT(DECODE(case_status_id, 16, 1, NULL)) OVER (PARTITION BY case_id) AS IS_CLOSED
FROM case_status) cs ON cs.case_id = c.case_id
left outer join lkp_case_status lkp_cs
on lkp_cs.id = cs.case_status_id
where c.case_type = 'P'
and c.delete_date is null
AND cs.is_closed = 0;
我認為它的 cs.is_closed = 0 不會讓記錄被拉起。所以我添加了 AND cs.is_closed = 0; 在如下連接條件內,
select c.* from cases c
left outer join (SELECT case_id,
case_status_id,
COUNT(DECODE(case_status_id, 16, 1, NULL)) OVER (PARTITION BY case_id) AS IS_CLOSED
FROM case_status) cs ON cs.case_id = c.case_id AND cs.is_closed = 0
left outer join lkp_case_status lkp_cs
on lkp_cs.id = cs.case_status_id
where c.case_type = 'P'
and c.delete_date is null;
但是此查詢正在提取所有記錄,而與第 3 行中的解碼條件無關。第 3 行 - 如果 case_status = 16,這意味著案例已關閉并且不拉記錄。
關于如何使其作業的任何輸入。基本上它必須從 case 表中提取所有記錄,如果 caseStatus 表的值為 case_status = 16 也不要提取案例記錄。
案件
id name
1 AAA
2 BBB
3 CCC
case_status
1 16
2 1
輸出應如下所示:
Result:
id name
2 BBB
3 CCC
但得到的是
id name
2 BBB
我的查詢沒有選擇 id = 3 的案例。
非常感謝任何幫助。謝謝你。
uj5u.com熱心網友回復:
如果要為外部連接表或表運算式添加過濾謂詞,則需要考慮它們的列顯示為空值。你可以做:
select c.* from cases c
left outer join (SELECT case_id,
case_status_id,
COUNT(DECODE(case_status_id, 16, 1, NULL))
OVER (PARTITION BY case_id) AS IS_CLOSED
FROM case_status) cs ON cs.case_id = c.case_id
left outer join lkp_case_status lkp_cs
on lkp_cs.id = cs.case_status_id
where c.case_type = 'P'
and c.delete_date is null
AND (cs.is_closed = 0 or cs.is_closed is null); -- changed here
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422031.html
標籤:
下一篇:如何更新表ssn值以具有破折號?
