Является ли это подходящим способом заполнения таблицы измерений уникальными значениями? - PullRequest
0 голосов
/ 31 января 2020

Подойдет ли следующий скрипт для заполнения таблицы date_dim? Я использую sqlalchemy для заполнения временной таблицы в MySQL с PANDAS DataFrame. Цель сценария SQL ниже - заполнить date_dim значениями date_dim_temp, если их там еще нет. Я также намереваюсь создать новые первичные ключи для новых записей в date_dim, но хочу проверить, нахожусь ли я на правильном пути с этим сценарием, прежде чем продолжить:

INSERT INTO date_dim  (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT *
FROM date_dim_temp 
WHERE NOT EXISTS (SELECT * FROM date_dim_temp ddt JOIN date_dim dd ON  dd.created_at = ddt.created_at);

Ответы [ 2 ]

1 голос
/ 31 января 2020

Вам не нужно объединение в НЕ СУЩЕСТВУЕТ. Также необходимо ли отличное?

INSERT INTO date_dim  (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT t.*
FROM date_dim_temp t
WHERE NOT EXISTS (SELECT 1 FROM date_dim d WHERE  d.created_at = t.created_at);
1 голос
/ 31 января 2020

Объединение в подзапросе NOT EXISTS не требуется, если вам нужно только проверить наличие столбца столбца created_at:

INSERT INTO date_dim (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt
WHERE NOT EXISTS (SELECT * FROM date_dim dd WHERE dd.created_at = ddt.created_at);

Также, если есть UNIQUE ограничение для created_at в date_dim, тогда вам не нужно NOT EXISTS. Используйте INSERT IGNORE:

INSERT IGNORE INTO date_dim (id, created_at, week_day, month_day, month_num, `year`) 
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt

Это также приведет к отклонению любых других строк, которые нарушают любое существующее ограничение.

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