Oracle
如何從連接中獲取選擇,其中一個表中沒有結果
我在一個 oracle 數據庫中工作,並希望獲得一些查詢來辨識客戶的任何地址更改。我正在根據每日批處理過程中的結果創建報告。我將以簡化表結構為例。
我有 2 張桌子正在使用。每個都是一個審計表,它通過觸發器跟踪更新和插入等更改。每個表還有一列儲存更改日期。
一個表包含縣程式碼,另一個包含街道地址:t_county 和 t_address
t_county
- 編號:數字(9)
- 縣: NUMBER(2)
- 日期:日期
t_address
- 編號:數字(9)
- 地址:VARCHAR2(60)
- 日期:日期
我需要建構一個查詢來選擇縣和地址,如果其中一個在特定日期有一行。
假設某一天地址發生變化,但縣內沒有變化。我希望查詢有如下結果
+---------+---------+--------+ | ID | County | Address| +---------+---------+--------+ | 1 | NULL |123 test| +---------+---------+--------+
如果縣有變更但地址相同:
+---------+---------+--------+ | ID | County | Address| +---------+---------+--------+ | 1 | 32 | NULL | +---------+---------+--------+
如何建構這樣的查詢?
這是一個選項,它使用
UNION
這些表。聚合(MAX
)用於在一行中顯示縣和地址的*變化;*否則,你會得到兩個單獨的行。如果在一個日期內有多個更改,這將無法正常工作。SQL> with t_county (id, county, cdate) as 2 (select 1, 10, date '2018-08-02' from dual union all 3 select 2, 20, date '2018-08-05' from dual 4 ), 5 t_address (id, address, cdate) as 6 (select 1, '123 test', date '2018-08-10' from dual union all 7 select 2, '222 twix', date '2018-08-05' from dual 8 ), 9 -- union of those tables 10 t_union as 11 (select id, county , null address, cdate from t_county union all 12 select id, null county, address , cdate from t_address 13 ) 14 select id, 15 max(county) county, 16 max(address) address 17 from t_union 18 where cdate = to_date('&par_date', 'yyyy-mm-dd') 19 group by id; Enter value for par_date: 2018-08-02 ID COUNTY ADDRESS ---------- ---------- -------- 1 10 SQL> / Enter value for par_date: 2018-08-05 ID COUNTY ADDRESS ---------- ---------- -------- 2 20 222 twix SQL>