我有两个表,如下所示。
交易表是代表买方和供应商之间的销售事件的表。表中的 ... 表示其他列,例如 TransactionDate、Store Information 等。
联系表是代表买方和供应商信息的表格,例如姓名和家庭地址等。
现在,这两个表共享一对一的关系,其中 BuyerID = ContactID 和 SellerID = ContactID。
我正在使用 python 脚本填充此表,因此答案可能是 python、SQL 或两者兼而有之。
当前状态
交易表
交易 ID (pk) | ... | 买家编号 | 卖家ID |
---|---|---|---|
11914 | 11914 买家 | 11914 卖家 | |
11915 | 11915 买家 | 11915卖家 | |
11916 | 11916 买家 | 11916 卖家 |
联系表
联系人 ID (pk) | ... | 名 | 姓 |
---|---|---|---|
11914 买家 | 麦克风 | 能源部 | |
11914 卖家 | 珍妮特 | 迈尔斯 | |
11915 买家 | 珍妮特 | 迈尔斯 | |
11915卖家 | 麦克风 | 能源部 | |
11916 买家 | 戴夫 | 短剑 | |
11916 卖家 | 珍妮特 | 迈尔斯 |
我想做的是删除联系人表中的重复行,并使表关系成为一对多。此外,例如,如果 Janet Myers 更改了她的姓氏,尽管所有其他列保持不变,但联系人表中将会有一个新的添加。即忽略ContactID 列,ContactTable 中不应有两个相同的行。
未来状态
交易表
交易 ID (pk) | ... | 买家编号 | 卖家ID |
---|---|---|---|
11914 | 06dfe636-4408-4abe-b902-b1ac6aab9849 | 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d | |
11915 | 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d | 06dfe636-4408-4abe-b902-b1ac6aab9849 | |
11916 | ab99de1f-a714-4709-9a1e-f3a143b279d2 | 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d |
联系表
联系人 ID (pk) | ... | 名 | 姓 |
---|---|---|---|
06dfe636-4408-4abe-b902-b1ac6aab9849 | 麦克风 | 能源部 | |
58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d | 珍妮特 | 迈尔斯 | |
ab99de1f-a714-4709-9a1e-f3a143b279d2 | 戴夫 | 短剑 |
解决这个问题的第一个想法是从所有其他列的哈希中创建 ContactID。
sha256(json.dumps(contactDict.encrypt('utf-8'))).hexdigest()
MERGE
然后,如果表中尚不存在 ContactID 哈希,我将使用语句添加联系人。我认为这会起作用,但是我正在考虑冒着与财务数据发生哈希冲突的风险。
除了哈希,我的另一个想法是MERGE
声明,但子句中有大约 15 列,ON
我认为这将是非常低的性能。