0

我有两个表,如下所示。

交易表是代表买方和供应商之间的销售事件的表。表中的 ... 表示其他列,例如 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我认为这将是非常低的性能。

4

0 回答 0