我是SQL新手所以要温柔!我在伦敦的一家慈善机构工作,所以我在SQL上工作,而且我已经陷入了你可能会闭着眼睛做的事情。
我有一张包含我要更新的行的表格:
它是一个显示我们数据库中潜在重复记录的表格。有一个存储过程可以根据客户帐户的数据创建一个条件字段,如果两条记录中的条件字段匹配,则会将它们标记为可能的重复项。
我们有一些已知的重复项,我们不久前必须创建Placeholder
作为姓氏。
标准字段与其他'真实'匹配。我们想要保留真实姓氏的记录。
我想做的是:
Placeholder
的状态更新为Delete
;和真实的'那些Keep
(即使我可以完全闪耀!)Placeholder
个的保留ID字段,使其成为具有匹配条件字段的行的customer_no字段完成后,另一个存储过程将从那里开始。
帮助!
答案 0 :(得分:0)
嗨欢迎来到Stack Overflow。
如果我理解你,你需要这样的东西:
declare @customers table(
customer_no int NOT NULL,
matching_criteria varchar(50) NOT NULL,
lname varchar(50) NOT NULL,
keepID int NULL,
[status] varchar(50) NULL);
INSERT INTO @customers VALUES(1, 'a', 'Smith', null, null);
INSERT INTO @customers VALUES(2, 'a', 'Placeholder', null, null);
INSERT INTO @customers VALUES(3, 'b', 'Jones', null, null);
INSERT INTO @customers VALUES(4, 'b', 'Placeholder', null, null);
INSERT INTO @customers VALUES(5, 'c', 'Brown', null, null);
INSERT INTO @customers VALUES(6, 'c', 'Placeholder', null, null);
INSERT INTO @customers VALUES(7, 'd', 'Williams', null, null);
INSERT INTO @customers VALUES(8, 'd', 'Placeholder', null, null);
INSERT INTO @customers VALUES(9, 'e', 'Taylor', null, null);
INSERT INTO @customers VALUES(10, 'e', 'Placeholder', null, null);
SELECT * FROM @customers;
UPDATE @customers set [status] = case lname WHEN 'Placeholder' THEN 'DELETE' ELSE 'Keep' END;
SELECT * FROM @customers;
UPDATE k
SET keepID = d.customer_no
FROM
@customers k
INNER JOIN @customers d
on k.matching_criteria = d.matching_criteria
WHERE d.[status] = 'Delete' AND k.[status] = 'Keep';
SELECT * FROM @customers;
如果您使用的是SQL Server,可以将其粘贴到“查询”窗口中并观察结果。
请在将来参考时告诉我们您使用的是哪个数据库,因为db到db的答案各不相同。以上是SQL Server。虽然大多数dbs的行为类似,但有些则不然。以上对连接的更新。例如,Oracle不允许这样做,因此使用Oracle时的语法不同 - Oracle当然可以实现同样的目的,它只是使用不同的SQL来实现。