Customer
:ID
(PK),各个领域。
CustomerDeleted
:Customer
表的几乎完全相同的副本。客户经常在Customer
表中复制(添加新客户的过程仅使用公共字段(如姓名和位置)进行检查,因此如果用户添加他/她错误地填写姓名或位置,则会是Customer
表中同一客户的两条记录,一旦发现重复,最后添加的条目将从Customer
表中删除并插入CustomerDeleted
包含存储当前/有效客户ID的列的表。
Beneficiary
:ID(PK),各个字段。
CustomerBeneficiary
:CustomerID
,BeneficiaryID
(两者都是PK)。 Customer
和Beneficiary
表之间的链接表。每个客户都可以拥有一定数量的受益人。
将CustomerID
表格中的BeneficiaryID
和CustomerBeneficiary
设置为各自表格的FK。
CustomerBeneficiary
中可能存在与当前Customer
和CustomerDeleted
相关联的受益人的记录,因此,如果您只是尝试添加指向Customer
表的FK它会给你以下错误
ALTER TABLE语句与FOREIGN KEY约束冲突
我需要更新CustomerBeneficiary
表,以便所有包含CustomerDeleted
客户ID的记录都指向有效/当前客户ID。删除的客户ID可能链接到与当前客户ID相同的受益人ID,因此无法执行UPDATE
语句,因为CustomerBeneficiary
表中存在重复的PK。
我认为必须有INSERT
(添加新行,以便当前客户指出他们的重复帐户所链接的任何受益人),然后是DELETE
(删除CustomerBeneficiary
表中CustomerID
是已删除客户的一部分的所有行。
现在,虽然我知道需要发生什么,但我的SQL知识非常有限,而且我完全不知道如何进行这样复杂的查询。我希望我已经足够好地解释了这个情况。有人可以帮忙。
答案 0 :(得分:1)
添加已删除客户关系且当前客户不
的关系INSERT INTO CustomerBeneficiary
SELECT DISTINCT cd.currentCustomer, cb.BeneficiaryID
FROM CustomerBeneficiary cb
INNER JOIN CustomerDeleted cd
ON cb.CustomerID = cd.CustomerID
WHERE cb.CustomerID in (SELECT CustomerID
FROM CustomerDeleted
WHERE currentCustomerID is not null)
AND
cd.currentCustomerID not in (SELECT CustomerID
FROM CustomerBeneficiary
WHERE CustomerID = cd.currentCustomerID
AND BeneficiaryID = cb.BeneficiaryID )
删除与不在客户表
的客户的所有关系DELETE
FROM CustomerBeneficiary
WHERE CustomerID not in (SELECT CustomerID FROM Customers)
现在您可以添加外出键