Oracle SQL联接删除和复制行
我在Oracle DB中有三个表Oracle SQL联接删除和复制行,sql,oracle,join,Sql,Oracle,Join,我在Oracle DB中有三个表 01. TBL_ITS_INS_CLAIM_TRANSACTIONS ╔═════════════════════════════╗ ║ Id PolicyMasterID Ref_No ║ ╠═════════════════════════════╣ ║ 01 106 P100 ║ ║ 02 106 P200 ║ ╚═════════════════════════════╝
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 ║
╚══════════════════════════════════════════════════╝
我怎样才能得到上面这样的结果呢?只是一个评论,但太长了 我很感谢您在格式化数据方面所做的努力,但这对于人们复制您的案例和测试某些代码来说并不是很有用 发布示例数据的最佳方式(IMHO)是发布人们可以轻松运行以创建案例的内容,而无需编辑 在您的问题中,我会将样本数据发布为:
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
您的结果与您的查询不匹配。当您没有在select子句中选择策略主Id时,为什么会显示它。此外,唯一匹配的事务id是01。为什么会显示其他结果?您能更好地解释一下所需结果背后的逻辑吗?今天的提示:使用表别名!(使查询更易于编写和读取。)什么不起作用?我只是解释说,您发布的表结构与您的查询不匹配,因此您应该编辑您的问题以解决此问题。我不明白你为什么接受这个答案。你需要的结果背后的逻辑我还不清楚。请试着更好地解释为什么你期望得到这样的结果。此外,更广泛的样本数据集也可能有用