Есть ли способ отслеживать изменения в двух таблицах с помощью SQL или EXCEL?

#mysql #sql #excel

Вопрос:

У меня проблема, с которой я надеялся, что кто-нибудь здесь сможет мне помочь. У меня есть 2 таблицы (старая и новая) с очень похожими данными (равные столбцы и количество строк), но с некоторыми различиями в некоторых значениях. Я хотел бы отслеживать различия в значениях (данных) между этими 2 таблицами. Я думаю использовать ЛЕВОЕ СОЕДИНЕНИЕ или ВНУТРЕННЕЕ СОЕДИНЕНИЕ, оба из которых не дают желаемого результата. Следует отметить, что идентификатор, который обычно является первичным ключом, не содержит уникальных значений (я добавил столбец Serial_Number, чтобы решить эту проблему). Мне действительно просто нужно увидеть значения, которые изменились. Из изображений вы заметите, что есть различия в Staff_ID и Amount на 5 и 6. Бывают случаи, когда Staff_ID остается тем же, но количество изменилось.

Подход 1:

 FROM Database_2
LEFT JOIN Database_1 
ON  Database_2.Staff_ID = Database_1.Staff_ID```

Approach 2:
```SELECT * 
FROM Database_2
INNER JOIN Database_1 
ON  Database_2.Staff_ID = Database_1.Staff_ID```

Approach 3: (I added a Serial_Number column. This is not even working)
```SELECT Serial_Number, Staff_ID, PT, Price  FROM Database_1 
EXCEPT
SELECT Serial_Number, Staff_ID, PT, Price from Database_2;```


A minimal reproducible:
 

СОЗДАЙТЕ ТАБЛИЦУ DB1 (
Serial_Number INT,
Staff_ID INT,
Price INT,
Percentage ЧИСЛОВОЙ (3, 2),
Change VARCHAR(1) НАБОР СИМВОЛОВ utf8
);
ВСТАВИТЬ В ЗНАЧЕНИЯ DB1
(1,53441, NULL,0,05, ‘Y’),
(2,53441, NULL,NULL,NULL),
(3,12855,500, NULL,NULL),
(4,12855,NULL,NULL, ‘Y’),
(5,2005511,NULL,NULL,’Y’),
(6,839123,1300,NULL, NULL);

СОЗДАЙТЕ ТАБЛИЦУ DB2 ( Serial_Number INT, Staff_ID INT, Price INT, Percentage NUMERIC(3, 2), Change VARCHAR(1) НАБОР СИМВОЛОВ utf8); ВСТАВИТЬ В ЗНАЧЕНИЯ DB2 (1,53441, NULL,0,05,NULL), (2,53441,550,NULL, ‘Y’), (3,12855,500,NULL,NULL), (4,12855,NULL,NULL,’Y’), (5,2005511,600,NULL,’Y’), (6,839123,1300, NULL,NULL)

Комментарии:

1. Мы вообще мало что знаем о структуре вашей таблицы, попробуйте предоставить образец данных в ваших двух таблицах и то, что вы подразумеваете под различием, различием в данных в столбцах или различием в количестве записей. Ожидаемый результат полезен

2. @paulr23 Спасибо. Теперь я разъяснил это в вопросе.

Ответ №1:

Чтобы увидеть строки в new, которых нет в old:

 SELECT * FROM new a
WHERE NOT EXISTS (
    SELECT 1 FROM old b
    WHERE a.Serial_Number = b.Serial_Number 
    AND a.Staff_ID = b.Staff_ID
    AND a.PT = b.PT
    AND a.Price = b.Price
)
 

И аналогично, чтобы увидеть строки в старом, которых нет в новом.

Ответ №2:

Я предлагаю вам использовать книгу Excel, в которой используются ДЕЙСТВИТЕЛЬНО абсолютные ссылки на ячейки, поэтому вы можете вставить "new" на один лист, "old" на другой лист, а на третьем листе вы можете легко увидеть различия. Причина наличия ДЕЙСТВИТЕЛЬНО абсолютных ссылок заключается в том, чтобы иметь возможность удалять / добавлять строки и / или столбцы на листах "new" и "old", в то время как Excel по-прежнему сравнивает ячейку с ячейкой по их абсолютной позиции. Дополнительным преимуществом сравнения в Excel является то, что вы можете установить пороговое значение, когда два соответствующих значения из "нового" и "старого" считаются одинаковыми, чтобы игнорировать "ложные срабатывания" небольших различий, вызванных двоичной арифметикой.

Вы можете скачать такую книгу Excel с LightningGuide.net , называемый компаратором списка записей.