Сравнение нескольких таблиц Mysql для поиска измененных записей - PullRequest
1 голос
/ 29 марта 2011

У меня есть три таблицы как дамп SQLITE3.

продукты, налог, инвентарь

Из этих таблиц готовится файл csv для импорта в раздел продуктов magento. Так что эта часть окончена.

Теперь нужно запускать ежедневный скрипт, который обновляет инвентарь, налоги, измененные данные о товаре (SKU не изменится ни в коем случае).

В этом разделе обновлений. Например, у меня 12000 записей, только 400 или 1000 записей могут быть изменены / изменены / обновлены в инвентарной таблице, налоговой таблице, таблице продуктов из базы данных за последний день. Остальные строки останутся такими же.

Поэтому я добавил таблицы последних дней как old_products, old_tax, old_inventory .

И попытался написать SQL-запрос для извлечения только измененных записей из двух наборов таблиц

(Примечание: оба набора таблиц доступны в одной и той же базе данных).

Может кто-нибудь помочь мне, как написать SQL-запрос для извлечения измененных записей путем сравнения двух наборов таблиц.

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Возможно, я бы изменил эту схему.

У меня будет таблица, в которой я буду хранить дату (даты), когда я в последний раз экспортировал данные в CSV:

CREATE TABLE CSVLastExported (
  ProductsExportDate datetime,
  TaxExportDate datetime,
  InventoryExportDate datetime
)

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

Запрос измененных данных для другого экспорта будет таким же простым, как сравнение столбца LastModified с соответствующим столбцом в CSVLastExported:

SELECT p.*
FROM products p
  INNER JOIN CSVLastExport e
    ON p.LastModified > e.ProductsExportDate
1 голос
/ 20 апреля 2011

это дает вам все модификации (и продукт):

 select * from products p inner join old_products o on p.id = o.id

и это модифицированные продукты:

 select * from products where id in (select id old_products)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...