我有難度修改腳本,針對這種情況,不知道是否有人也許能幫助:內部或外部LEFT JOIN
我有一個address
表和phone
表都共享稱爲id_number
同一列。所以兩個表上的id_number = 2
指的是同一個實體。地址和電話信息過去一直保存在一張表中(address
表),但自從我們轉移到Oracle 11g以來,它現在分成address
和phone
表。
有一個名爲both_ids
的第三個表。此表格除了存儲SSN
和某些其他ID的other_ids
列外,還有一個id_number
列。
面前的桌子被分成address
和phone
表,我有這個腳本: (寫在Sybase)
INSERT INTO sometable_3 (
SELECT a.id_number, a.other_id,
NVL(a1.addr_type_code,0) home_addr_type_code,
NVL(a1.addr_status_code,0) home_addr_status_code,
NVL(a1.addr_pref_ind,0) home_addr_pref_ind,
NVL(a1.street1,0) home_street1,
NVL(a1.street2,0) home_street2,
NVL(a1.street3,0) home_street3,
NVL(a1.city,0) home_city,
NVL(a1.state_code,0) home_state_code,
NVL(a1.zipcode,0) home_zipcode,
NVL(a1.zip_suffix,0) home_zip_suffix,
NVL(a1.telephone_status_code,0) home_phone_status,
NVL(a1.area_code,0) home_area_code,
NVL(a1.telephone_number,0) home_phone_number,
NVL(a1.extension,0) home_phone_extension,
NVL(a1.date_modified,'') home_date_modified
FROM both_ids a, address a1
WHERE a.id_number = a1.id_number(+)
AND a1.addr_type_code = 'H');
現在我們移動到Oracle 11g,地址和電話信息被分割。
如何修改上述腳本以在Oracle 11g中生成相同的結果?
我必須先在地址表和電話表之間進行INNER JOIN,然後做兩個OUTPUT JOIN到both_ids嗎?
我嘗試以下,並沒有奏效:
Insert Into..
select ...
FROM a1. address
INNER JOIN t.Phone ON a1.id_number = t.id_number
LEFT OUTER JOIN both_ids a ON a.id_number = a1.id_number
WHERE a1.adrr_type_code = 'H'
您是否期望給定的id_number始終出現在所有三個表中,其中兩個還是僅有一個? – Rikalous
給定的id_number應始終存在於地址和電話表中。如果給定的id_number存在於地址中,則它應該也出現在電話表中,除非該實體沒有電話。在Both_ids表另一方面這個給定的id_number可能會或可能不存在 – user1557856
好吧,你的加入看起來不錯,那麼什麼是行不通的?錯誤或錯誤的結果? – Rikalous