如何在oracle CASE WHEN语句中查找重复记录

问题描述

我有两个如下表。 TABLEA和表TABLEB。我们对TRANS_ID进行外部联接并比较两个表。

我想要得到结果,如结果所示。我们仅在TABLEA中(即,基于TABLEA.TRANS_ID)检查重复项。

TABLEA
+------+----------+-------+--+-------------+
| UUID | TRANS_ID | NAME  |  | PHONENUMBER |
+------+----------+-------+--+-------------+
|  123 |     7928 | SCOTT |  | 87482837849 |
|  123 |     7928 | SCOTT |  | 87482837849 |
|  489 |     7493 | TOM   |  | 79274778397 |
|  827 |     7920 | DAVID |  | 23794928749 |
|  324 |     8472 | PAT   |  | 87927478839 |
+------+----------+-------+--+-------------+

TABLEB
+----------+----------+--------+-------------+
| BATCH_ID | TRANS_ID | SENDER | PHONENUMBER |
+----------+----------+--------+-------------+
|   823784 |     7438 | LSK    | 84748394092 |
|   793847 |     7493 | KLI    | 79274778397 |
|   748738 |     7920 | ISL    | 74892890487 |
+----------+----------+--------+-------------+

RESULT
+----------+-------------+-------------------------+
| TRANS_ID | PHONENUMBER |           STATUS        |
+----------+-------------+-------------------------+
|     7928 | 87482837849 |    DUPLICATE RECORD     |
|     7928 | 87482837849 |    NOT IN TABLEB        |
|     7438 | 84748394092 |    NOT IN TABLEA        |
|     7920 | 23794928749 |    PHONENUMBER MISMATCH |
|     8472 | 87927478839 |    NOT IN TABLEB        |
+----------+-------------+-------------------------+

我尝试使用以下情况的when语句。除了提取重复项外,我涵盖了所有情况。如果表A中有重复记录,而表B中不存在重复记录,则第一个记录应为“ NOT IN TABLEB”,随后的记录应为“ DUPLICATE RECORD”

 CASE
          WHEN TABLEA.TRANS_ID is null THEN 'NOT IN TABLEA'
          WHEN TABLEB.TRANS_ID is null THEN 'NOT IN TABLEB' 
          WHEN decode(TABLEA.PHONENUMBER,ALRAJHI_TABLEB.PHONENUMBER,1,0)=0 THEN 'PHONENUMBER MISMATCH'             
          END

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)