Mysql 这是用唯一值填充维度表的适当方法吗?
以下脚本是否适合填充date_dim表?我正在使用sqlalchemy在MySQL中用熊猫数据框填充一个临时表。下面的SQL脚本的目的是用dates\u dim\u temp的值填充dates\u dim,如果它们还不存在的话。我还打算为date_dim中的新条目创建新的主键,但希望在继续之前检查我是否使用此脚本处于正确的轨道上:Mysql 这是用唯一值填充维度表的适当方法吗?,mysql,database,data-warehouse,star-schema,Mysql,Database,Data Warehouse,Star Schema,以下脚本是否适合填充date_dim表?我正在使用sqlalchemy在MySQL中用熊猫数据框填充一个临时表。下面的SQL脚本的目的是用dates\u dim\u temp的值填充dates\u dim,如果它们还不存在的话。我还打算为date_dim中的新条目创建新的主键,但希望在继续之前检查我是否使用此脚本处于正确的轨道上: INSERT INTO date_dim (id, created_at, week_day, month_day, month_num, `year`) SEL
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);
如果只需要检查在处创建的列的列是否存在,则不需要在子查询中加入
NOT EXISTS
:
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);
另外,如果在date\u dim
中创建的存在唯一的约束,则您不需要不存在。使用插入忽略
:
INSERT IGNORE INTO date_dim (id, created_at, week_day, month_day, month_num, `year`)
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt
这也将拒绝违反任何现有约束的任何其他行。如果您只需要检查在
处创建的列的列是否存在,则不需要在子查询中加入NOT EXISTS
:
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);
另外,如果在date\u dim
中创建的存在唯一的约束,则您不需要不存在。使用插入忽略
:
INSERT IGNORE INTO date_dim (id, created_at, week_day, month_day, month_num, `year`)
SELECT DISTINCT ddt.*
FROM date_dim_temp ddt
这还将拒绝违反任何现有约束的任何其他行。不需要“不存在”中的联接。是否也有必要进行区分
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);
您不需要在“不存在”中加入。是否也有必要进行区分
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);