SQL Oracle - Как найти строку, которая была пропущена в другой таблице - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующие таблицы:

CREATE TABLE tbl_part_1
(
  LOGID NUMBER 
, TIMESTAMP DATE 
, TASK VARCHAR2(200 CHAR)
, TERMINALIP VARCHAR2(256 CHAR) 
) 

CREATE TABLE tbl_part_2
(
  LOGID NUMBER 
, MREC_ID VARCHAR2(40 CHAR) NOT NULL 
, SUBTASK VARCHAR2(200 CHAR) 
, USER VARCHAR2(50 CHAR) 
, TRANSACTIONID VARCHAR2(100 CHAR) 
) 

CREATE TABLE tbl_full_record 
(
  REC_ID VARCHAR2(32 CHAR) NOT NULL 
, TMSTAMP DATE 
, USER VARCHAR2(250 CHAR) 
, META_RECORD VARCHAR2(2000 CHAR)   
, DATA_RECORD CLOB 
) 

В столбце "META_RECORD" я получил XML:

<Meta_Record>
    <TimeStamp>(DATE TIME HERE)</TimeStamp>
    <User>(USER NAME HERE)</User> <!-- USER from tbl_part_2 -->
    <TerminalIP>(USER IP HERE)</TerminalIP>  <!-- TERMINALIP from tbl_part_1 -->
    <Task>(USER TASK HERE)</Task> <!-- TASK from tbl_part_1 -->
    <SubTask>(USER SUBTASK HERE)</SubTask>  <!-- SUBTASK from tbl_part_2 -->
    <MetaRecordID>(MREC_ID HERE)</MetaRecordID>  <!-- MREC_ID from tbl_part_2 -->
    <TransactionID>(TRANSACTIONID HERE)</TransactionID>   <!-- TRANSACTIONID from tbl_part_2 -->
</Meta_Record>

Таблица "tbl_full_record" содержит те же данные, что и "tbl_part_1" и "tbl_part_2". Но в настоящее время я скучаю по одному в строке в "tbl_full_record" (или получил слишком много в "tbl_part_1" с "tbl_part_2").
Примечание: есть несколько «tbl_full_record» (по одному на каждый месяц года), но только один раз «tbl_part_1 + 2» Сопоставление должно быть сделано через поле «META_RECORD» в «tbl_full_record»

Я хотел бы знать, как я узнаю, что такое пропущенная / слишком большая строка? Как бы мне настроить запрос, чтобы получить это, что также является производительным, если предположить, что "tbl_part_1 + 2" имеет около 20.000.000 строк, а "tbl_full_record" - 1.500.000?

1 Ответ

0 голосов
/ 29 октября 2018

Предполагая, что log_id и rec_id совпадают.

Дополнительные строки в tbl_part_1, tbl_part_2:

select tp1.*, tp2.* from tbl_part_1 tp1, tbl_part_2 tp2
      where tp1.logid = tp2.logid
   --add necessary join conditions
  and not exists ( select * from tbl_full_record tf
                    where tp1.logid = tf.rec_id
                    --add any correlated join conditions
                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...