Сделайте анти-объединение на двух столбцах в MySQL - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу создать соединение, используя два столбца. Я не могу понять, как это сделать. Вот мое описание проблемы:

У меня есть две таблицы. Каждая таблица имеет три столбца: дата, product_description & $ sales. Я получаю обновленную таблицу каждый день, с данными за последний день (давайте назовем эту обновленную таблицу или ut ). В бэкэнде я веду исторические данные за последние несколько месяцев (назовем эту историческую таблицу или ht ). Используя SQL, я хочу добавить новую таблицу к историческим данным.

Чтобы удовлетворить дублирование, я хочу присоединиться по дате и ID. Идентификатор включен в описание продукта. В описании продукта «1234 - Toy Pokemon» идентификатор равен 1234. Вот как выглядит мой скрипт:

select
*
from ut

union all

-- exclude data from historical data that is going to be replaced by new data

select
ht.*
from ht
left join ut on ht.date = ut.date and substring_index(ht.product_description,'-',1) = substring_index(ut.product_description,'-',1)
where ut.date and substring_index(ut.product_description,'-',1) is null

Однако это не работает.

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

1 голос
/ 11 апреля 2020

'Я хочу добавить новую таблицу к историческим данным.' тогда вам не нужно немного до и до союза. Например, используя ваш второй выбор в качестве основы и исправляя предложение where.

drop table if exists ut,ht;

create table ut(dt date,product_description varchar(20), sales int);
create table ht(dt date,product_description varchar(20), sales int);

insert into ht values
('2020-04-01','1 - aaa',10),('2020-04-02','1 - aaa',10);

insert into ut values
('2020-03-01','1 - aaa',20),('2020-04-01','1 - aaa',20);

insert into ht
select ut.dt,ut.product_description,ut.sales
from ut
left join ht on ht.dt = ut.dt and 
            substring_index(ht.product_description,'-',1) = substring_index(ut.product_description,'-',1) 
where ht.dt is null and ht.product_description is null;

select * from ht;

+------------+---------------------+-------+
| dt         | product_description | sales |
+------------+---------------------+-------+
| 2020-04-01 | 1 - aaa             |    10 |
| 2020-04-02 | 1 - aaa             |    10 |
| 2020-03-01 | 1 - aaa             |    20 |
+------------+---------------------+-------+
3 rows in set (0.001 sec)

Вы также можете рассмотреть триггер на ut или предложение существующие.

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