2017-03-02 92 views
0

我在Oracle數據庫三個表,的Oracle SQL加入和刪除重複的行

01. TBL_ITS_INS_CLAIM_TRANSACTIONS 

╔═════════════════════════════╗ 
║ Id PolicyMasterID Ref_No ║ 
╠═════════════════════════════╣ 
║ 01 106    P100 ║ 
║ 02 106    P200 ║ 
╚═════════════════════════════╝ 





02. TBL_ITS_INS_CLAIM_SETTLEMENT 

╔══════════════════════════════╗ 
║ Id CLAIM_TRANSACTIONS_ID ║ 
╠══════════════════════════════╣ 
║ 01 01      ║ 
║ 02 01      ║ 
║ 03 01      ║ 
╚══════════════════════════════╝ 


03. TBL_ITS_INS_CLAIM_SUBROGATION 

╔════════════════════════════╗ 
║ Id CLAIM_TRANSACTIONS_ID ║ 
╠════════════════════════════╣ 
║ 01 01     ║ 
║ 02 01     ║ 
║ 03 01     ║ 
╚════════════════════════════ 

我曾嘗試是,我寫了下面的查詢得到的結果...但它的重複行。 我已編輯代碼:

SELECT TBL_ITS_INS_CLAIM_TRANSACTIONS.ID as "Claim Trans ID",  
    TBL_ITS_INS_CLAIM_SETTLEMENT.ID as "SettlementId", 
    TBL_ITS_INS_CLAIM_SUBROGATION.ID as "SUBROGATION ID" 
FROM TBL_ITS_INS_CLAIM_TRANSACTIONS 
LEFT JOIN TBL_ITS_INS_CLAIM_SUBROGATION 
ON TBL_ITS_INS_CLAIM_TRANSACTIONS.ID = TBL_ITS_INS_CLAIM_SUBROGATION.CLAIM_TRANSACTIONS_ID 
LEFT JOIN TBL_ITS_INS_CLAIM_SETTLEMENT 
ON TBL_ITS_INS_CLAIM_TRANSACTIONS.ID = TBL_ITS_INS_CLAIM_SETTLEMENT.CLAIM_TRANSACTIONS_ID 

在上面的查詢

╔══════════════════════════════════════════════════╗ 
║ Claim_Trans_ID SettlementId SUBROGATION _ID ║ 
╠══════════════════════════════════════════════════╣ 
║ 106     01    01   ║ 
║ 106     01    02   ║ 
║ 106     02    01   ║ 
║ 106     02    02   ║ 
║ 106     03    01   ║ 
║ 106     03    02   ║ 
╚══════════════════════════════════════════════════╝ 

我希望得到類似下面的結果

╔══════════════════════════════════════════════════╗ 
║ Claim_Trans_ID SettlementId SUBROGATION _ID ║ 
╠══════════════════════════════════════════════════╣ 
║ 106      01   01   ║ 
║ 106      02   02   ║ 
║ 106      03      ║ 
╚══════════════════════════════════════════════════╝ 

我怎樣才能得到類似結果上面

+0

你的結果沒不符合你的查詢。爲什麼在沒有在select子句中選擇策略主標識時顯示?此外,唯一匹配的交易ID爲01.爲什麼會顯示其他人? – Utsav

+0

您能否更好地解釋您所需結果背後的邏輯? – Aleksej

+0

今天提示:使用表別名! (使查詢更容易編寫和閱讀。) – jarlh

回答

1

只是一個評論,但太長。

我很感謝你在格式化數據方面的努力,但這對於人們重現你的情況和測試一些代碼並不是那麼有用。

發佈樣本數據的最佳方式(恕我直言)發佈了一些內容,人們可以輕鬆運行以創建案例,而無需編輯。

在你的問題,我會發布樣本數據:

create table TBL_ITS_INS_CLAIM_TRANSACTIONS(Id, PolicyMasterID, Ref_No) as (
    select '01', 106, 'P100' from dual union all 
    select '02', 106, 'P100' from dual 
); 
create table TBL_ITS_INS_CLAIM_SETTLEMENT(ID, CLAIM_TRANSACTIONS_ID) as (
    select '01', '01' from dual union all 
    select '02', '01' from dual union all 
    select '03', '01' from dual 
); 
create table TBL_ITS_INS_CLAIM_SUBROGATION (Id, CLAIM_TRANSACTIONS_ID) as (
select '01', '01' from dual union all 
select '02', '01' from dual union all 
select '03', '01' from dual 
); 

一旦創建表,可以很容易地發現,你的表結構不符合您查詢:

SQL> SELECT TBL_ITS_INS_CLAIM_TRANSACTIONS.ID as "Claim Trans ID", 
    2 TBL_ITS_INS_CLAIM_SETTLEMENT.ID as "SettlementId", 
    3 TBL_ITS_INS_CLAIM_SUBROGATION.ID as "SUBROGATION ID" 
    4 FROM TBL_ITS_INS_CLAIM_TRANSACTIONS 
    5 LEFT JOIN TBL_ITS_INS_CLAIM_SUBROGATION 
    6 ON TBL_ITS_INS_CLAIM_TRANSACTIONS.ID = TBL_ITS_INS_CLAIM_SUBROGATION.CLAIM_TRAN_SUM_ID 
    7 LEFT JOIN TBL_ITS_INS_CLAIM_SETTLEMENT 
    8 ON TBL_ITS_INS_CLAIM_TRANSACTIONS.ID = TBL_ITS_INS_CLAIM_SETTLEMENT.CLAIM_TRAN_SUM_ID; 
ON TBL_ITS_INS_CLAIM_TRANSACTIONS.ID = TBL_ITS_INS_CLAIM_SUBROGATION.CLAIM_TRAN_SUM_ID 
             * 
ERROR at line 6: 
ORA-00904: "TBL_ITS_INS_CLAIM_SUBROGATION"."CLAIM_TRAN_SUM_ID": invalid 
identifier 
+0

這不起作用 –

+0

什麼不起作用?我只解釋了你發佈的表結構與你的查詢不符,所以你應該編輯你的問題來解決這個問題。我不明白你爲什麼接受這個答案 – Aleksej

+0

對不起,現在我編輯了這個查詢 –