Mysql - вставка нескольких уникальных строк без уникального ключа - PullRequest
0 голосов
/ 25 января 2020

У меня вопрос по поводу бюджетного приложения, которое я пишу. Я регулярно импортирую транзакции из своего банка в базу данных mysql. Я делаю это с помощью функции «загрузка транзакций» моего онлайн-банка, где я получаю список транзакций на основе выбранного диапазона дат. Для работы моего приложения крайне важно, чтобы в моей базе данных не было дублированных транзакций. Загруженный список транзакций представлен в следующем формате:

  • Дата, описание, сумма, текущий баланс.

Итак, как вы видите, кикер состоит в том, что транзакции по моей дебетовой карте не иметь уникальный ссылочный идентификатор! Это сводит меня с ума, потому что мои загруженные кредитные транзакции из того же банка имеют уникальный ссылочный идентификатор, а мои транзакции по дебетовым картам - нет. Итак, я хочу взять группу транзакций (обычно около 20 или около того) и создать один запрос вставки mysql, который вставляет транзакции из этой группы, которые имеют уникальную комбинацию даты, des c, amt и сальдо. Например, в загруженном выписке из моего банка есть пять транзакций:

  • 12/20/2019 Подарок для Джо 5.00 10000.00
  • 12/20 / 2019 Paint 10.00 9990.00
  • 12/21/2019 Место для гамбургеров 20,00 9970,00
  • 12/21/2019 Electri c Счет 100,00 9870,00
  • 12/21/2019 Mov ie 10,00 9860,00

И в базе данных mysql уже есть

  • 12/20/2019 Подарок для Джо 5.00 10000.00
  • 12/20/2019 Paint 10.00 9990.00

Тогда я только хочу вставить

  • 12/21/2019 Место для гамбургеров 20,00 9970,00
  • 12/21/2019 Электри c Счет 100,00 9870,00
  • 12/21/2019 Mov ie 10.00 9860.00

В основном я хочу вставить уникальные строки в свою базу данных, и поскольку BoA не предоставляет уникальный идентификатор, мне нужны дополнительные логи c для определения уникальности. Не могли бы вы дать мне руководство о том, как построить этот запрос mysql? Если бы вы могли указать мне на соответствующий учебник, это было бы очень ценно! Спасибо всем.

1 Ответ

0 голосов
/ 25 января 2020

Если table1 - это таблица, в которую вы хотите вставить новые строки, и table2 таблица, содержащая новые строки для вставки, вы можете использовать NOT EXISTS:

insert into table1(Date, Description, Amount, RunningBal)
select t2.Date, t2.Description, t2.Amount, t2.RunningBal
from table2 t2
where not exists (
  select 1 from table1 t1
  where t1.Date = t2.Date and t1.Description = t2.Description
    and t1.Amount = t2.Amount and t1.RunningBal = t2.RunningBal
)
...