Создать таблицу SCD2, когда столбцы не различимы - PullRequest
0 голосов
/ 07 января 2020

Мне сложно описать, поэтому, пожалуйста, оставайтесь со мной и используйте код ниже в sql fiddle . Как видите, у меня есть две таблицы. Если вы посмотрите на столбец Отца, то здесь есть два Джона, а в таблице 2 обновлена ​​версия столбца Джона, о чем свидетельствует увеличение значения «Версия» (оно увеличивается с 10 до 11, в то время как другой Джон остается в 9). В свою очередь, я хотел бы установить старое значение Джона как Ложное (только Версия, в которой было 10). Но, как вы можете видеть, в колонке Отца есть два Джона, поэтому с моей логикой c оба превратятся в Ложь. Как я могу решить эту проблему, чтобы только John, у которого было изменение в Версии, было бы установлено в false?

    CREATE TABLE IF NOT EXISTS `table_2` 
(
    `column_number` int(6) unsigned NOT NULL,
    `Father` varchar(200) NOT NULL,
    `VERSION` varchar(200) NOT NULL,
    `ADDRESS_TYPE` varchar(200) NOT NULL,
    `Current_record` varchar(200) NOT NULL,

    PRIMARY KEY (`row_number`)
);

  INSERT INTO `table_2` (`row_number`,`Father`, `VERSION`, `ADDRESS_TYPE`, `Current_record`) 
  VALUES ('1', 'John', '10', 'Billing', 'True'),
       ('2', 'John','9', 'PO BOX', 'True'),
       ('3', 'Joe', '4', 'Billing', 'True'),
       ('4', 'Jeremy', '4','PO BOX',  'True'),
       ('5', 'Jack', '4','PO BOX', 'True'),
       ('6', 'NULL', '5','PO BOX', 'True');

CREATE TABLE IF NOT EXISTS `table_3` 
(
    `column_number` int(6) unsigned NOT NULL,
    `Father` varchar(200) NOT NULL,
    `VERSION` varchar(200) NOT NULL,
    `ADDRESS_TYPE` varchar(200) NOT NULL,
    `Current_record` varchar(200) NOT NULL,

    PRIMARY KEY (`column_number`)
);

    INSERT INTO `table_3` (`row_number`,`Father`, `VERSION`, `ADDRESS_TYPE`, `Current_record`) 
VALUES ('1', 'John', '11','PO BOX', 'True'),
       ('2', 'John','9','Billing', 'True'),
       ('3', 'Joe', '4','PO BOX', 'True'),
       ('4', 'Jeremy', '4','PO BOX', 'True'),
       ('5', 'Jack', '4','PO BOX', 'True'),
       ('6', 'NULL', '5','PO BOX', 'True');


update table_2 as a
set a.current_record = FALSE 
where a.Father in 
(select Father from table_3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...