【发布时间】:2026-01-08 07:25:01
【问题描述】:
我有这两张桌子:
CREATE TABLE [dbo].[Customer]
(
[CustomerName] VARCHAR(20) NOT NULL,
[CustomerLink] VARCHAR(40) NULL
)
CREATE TABLE [dbo].[CustomerIdentification]
(
[CustomerName] VARCHAR(20) NOT NULL,
[ID] VARCHAR(50) NOT NULL,
[IDType] VARCHAR(16) NOT NULL
)
我还添加了一些测试数据..
INSERT [dbo].[Customer]
([CustomerName])
VALUES ('Fred'),
('Bob'),
('Vince'),
('Tom'),
('Alice')
INSERT [dbo].[CustomerIdentification]
VALUES
('Fred', 'A', 'Passport'),
('Fred', 'A', 'SIN'),
('Fred', 'A', 'Drivers Licence'),
('Bob', 'A', 'Passport'),
('Bob', 'B', 'Drivers Licence'),
('Bob', 'C', 'Credit Card'),
('Vince', 'A', 'Passport'),
('Vince', 'B', 'SIN'),
('Vince', 'C', 'Credit Card'),
('Tom', 'A', 'Passport'),
('Tom', 'B', 'SIN'),
('Tom', 'A', 'Drivers Licence'),
('Alice', 'B', 'Drivers Licence')
基本上,一个客户(来自客户表)可以有多个标识。例如,Fred 有护照、犯罪和驾驶执照,所有 3 的值都是 A(值也可能不同)。
这是我想要的输出:
测试 1:价值为 A 的护照
从表中:第一个常见标识是 Passport,值为 A:4 个客户具有此 ID。 Fred、Bob、Vince 和 Tom,也许他们都是同一个客户,如果是这样的话,我们想在客户表的 CustomerLink 字段中用一个唯一的 ID (guid) 链接他们所有 4 个。
但是,如果客户之间有 1 个 ID 匹配,那么如果其中任何一个具有其他公共 IDType,其他 ID 也应该匹配。例如,Fred 也有值为 A 的 SIN,在 Vince 和 Tom 上也存在,但值为 B。所以这个组不是同一个客户。未完成链接。
测试 2:值为 B 的 SIN
下一个常见的标识是具有值 B 的 SIN,存在于 Vince 和 Tom 中。 Vince 和 Tom 确实是同一个客户,因为他们的 Passport 也具有相同的值 (A)。两者的第三个身份证明具有不同的 IDType、信用卡和驾驶执照。因此它们可以被链接。因此,我们将 vince 和 Tom 链接为客户表中的同一客户。
测试 3:值为 A 的驾驶执照
这适用于 Fred 和 Tom。两者都有价值A的护照。两者都有共同的 SIN,但是,两者的 SIN 值不同。它的 A 代表 Fred,B 代表 Tom。因此,他们不是同一个客户。未完成链接。
测试 4:值为 B 的驾驶执照
这适用于 Bob 和 Alice。他们确实是同一个客户,因为 Bob 和 Alice 都拥有价值 B 的驾驶执照。 Bob 有另外 2 个 ID,而 Alice 没有,这很好,因为这些 ID 对于 Bob 来说是唯一的。因此,我们将 Bob 和 Alice 链接为客户表中的同一客户。
测试 5:价值 C 的信用卡
这适用于 Bob 和 Vince。
但是 Bob 已经与 Alice 关联,所以我们必须将 Alice 带入图片中。 文斯已经和汤姆有联系,所以我们必须把汤姆带入画面。
现在,Bob 拥有值为 B 的驾驶执照,而 Tom 也拥有值为 A 的驾驶执照。不同的值但相同的 ID(驾驶执照)会导致此组无法链接。因此,没有完成链接,之前的链接仍然存在。
最后,我们剩下 Vince 和 Tom、AND、Bob 和 Alice 在客户表中被链接为相同的客户。所以客户表可能看起来像...
CustomerName Customer Link
------------ -------------
Fred NULL
Bob YYYYYY
Vince XXXXXX
Tom XXXXXX
Alice YYYYYY
【问题讨论】:
-
作业伪装成问题?
-
@a'b'c'd'e'f'g'h',这里没有太多伪装 =)
-
有趣的问题,但这是作业吗?如果是这样,用作业标签标记它是公平的。您是否也尝试过自己解决这个问题?您是否在某个特定领域苦苦挣扎?
-
没有作业。我以前用不同的语言问过这个问题,但人们听不懂。 (*.com/questions/8014815/…) 所以我不得不把它简化了很多,这使它看起来像家庭作业。我真的试过了,但我无法理解逻辑。另一个线程上的汤姆拍得很好,但他的逻辑仍然没有产生预期的结果。
标签: sql