我有一个联系人管理系统和我的联系人的 sql 转储,其中有五六列数据,我想导入到三个特定的表中。想知道解决这个问题的最佳方法是什么。我已经上传了 sql 转储...它现在在我的联系人管理数据库中是一个表。
crm 中的表在公司表中只需要 contactID...而在歌曲表中:
- 公司编号,
- 联系方式,
- 添加日期(非必需)和
- 备注(非必需)
然后是第三张表,只需要contactname的contact表。
我已经将数据上传到三个表中的每一个(不确定我的顺序是否正确)但现在需要更新并将第四个表(最初是 sql 转储)中的数据与其他三个表匹配并更新一切都有其唯一标识符。
表结构:
+DUMP_CONTACTS
id <<< I dont need this ID, the IDs given to each row in the CRM are the important ones.
contact_name
company
year
event_name
event_description
====Destination Tables====
+++CONTACTS TABLE++
*contactID < primary key
*contact_name
+++COMPANIES TABLE+++
*companyID < primary key
*name
*contact_ID
*year
++++Events++++
*EventID < primary key
*companyID
*contactID
*eventname
*description
最佳答案
您帖子中的某些部分我仍然不明白,所以我将为您提供 SQL,然后您可以在测试环境中运行它们,我们可以从那里获取它和/或返回并开始再次:
-- Populate CONTACTS_TABLE with contact_name from uploaded dump
INSERT INTO CONTACTS_TABLE (contact_name)
SELECT contact_name FROM DUMP_CONTACTS
-- Populate COMPANIES with information from both CONTACTS_TABLE + dump
INSERT INTO COMPANIES (name, contact_ID, year)
SELECT d.company, c.contactID, d.year
FROM DUMP_CONTACTS AS d
INNER JOIN CONTACTS_TABLE AS c
ON d.contact_name = c.contact_name
-- Populate SONGS_TABLE with info from COMPANIES
INSERT INTO SONGS_TABLE (companyID, contactID)
SELECT cm.companyID, cm.contact_ID
FROM COMPANIES AS cm
-- Populate Events with info from COMPANIES + dump
INSERT INTO Events (companyID, contactID, eventname, description)
SELECT cm.companyID, cm.contact_ID, d.event_name, d.event_description
FROM DUMP_CONTACTS AS d
INNER JOIN COMPANIES AS cm
ON d.company = cm.name
我首先填充 CONTACTS_TABLE
然后,由于 contactID
COMPANIES
中的记录需要, 从 CONTACTS_TABLE
插入记录加入转储。 SONGS_TABLE
直接从 COMPANIES
获取数据,最后是 Events
通过加入 COMPANIES
获取其数据和转储。
关于MySQL 查询更新多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623462/