Сравните две таблицы на разницу и вывод в другую таблицу - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть таблица A, содержащая информацию о списке файлов.

enter image description here

У меня есть другая таблица B, содержащая информацию об этом же списке файлов, но LastModifyTime может измениться.

enter image description here

Теперь я хочу сравнить эти две таблицы, найти все различия и ввести данные в таблицу C. Есть шансыновые файлы существуют в таблице B, но в таблице A. я мог бы использовать

SELECT * FROM Table B

EXCEPT

SELECT * FROM Table A

Это только дает мне список различий.но я хочу, чтобы таблица C выглядела следующим образом: она содержит данные из таблицы A и таблицы B о различиях LastModifyDate.

Как это можно сделать?left join?

Примечание. Мне нужно, чтобы результат сравнения записывался в таблицу C., а не только как результат запроса.

enter image description here

Ответы [ 4 ]

2 голосов
/ 28 апреля 2019

Вы можете попробовать использовать Outer JOIN с Source_Last_Modify_Date с tableA, не равным Source_Last_Modify_Date с tbaleb.

SELECT a.Source_File_Name,
       a.Source_Creation_Date,
       a.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_A',
       b.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_B'
FROM [Table B] b 
LEFT JOIN [Table A] a 
ON a.Source_File_Name = b.Source_File_Name 
AND a.Source_Creation_Date = b.Source_Creation_Date
AND b.Source_Last_Modify_Date <> a.Source_Last_Modify_Date
0 голосов
/ 28 апреля 2019

Если вы также хотите учесть удаление файла, вам нужен механизм FULL JOIN или аналогичный.Фильтрация по FULL JOIN сложна:

SELECT COALESCE(a.Source_File_Name, b.Source_File_Name) as Source_File_Name,
       COALESCE(a.Source_Creation_Date, b.Source_Creation_Date) as Source_Creation_Date,
       a.Source_Last_Modify_Date as Source_Last_Modify_Date_From_Table_A,
       b.Source_Last_Modify_Date as Source_Last_Modify_Date_From_Table_B
FROM [Table B] a FULL JOIN
     [Table A] b
     ON b.Source_File_Name = a.Source_File_Name AND
        b.Source_Creation_Date = a.Source_Creation_Date
WHERE a.Source_File_Name IS NULL OR
      b.Source_File_Name IS NULL OR
      b.Source_Last_Modify_Date <> a.Source_Last_Modify_Date;
0 голосов
/ 28 апреля 2019

Небольшое изменение в ответе выше из-за постановки вопроса «Есть вероятность, что новые файлы существуют в таблице B, но в таблице A».

SELECT b.Source_File_Name,
         b.Source_Creation_Date,
         a.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_A',
         b.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_B'
  FROM [Table B] b 
  LEFT JOIN [Table A] a 
  ON b.Source_File_Name = a.Source_File_Name 
  AND b.Source_Creation_Date = a.Source_Creation_Date
  AND b.Source_Last_Modify_Date <> a.Source_Last_Modify_Date

Может быть, это будет полезно.

0 голосов
/ 28 апреля 2019

Похоже, вам нужно использовать команду MINUS для меня. Смотри http://www.sqltutorial.org/sql-minus/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...