SQL更新行与另一行的信息(菜鸟)

时间:2017-07-04 14:04:46

标签: sql

我是SQL新手所以要温柔!我在伦敦的一家慈善机构工作,所以我在SQL上工作,而且我已经陷入了你可能会闭着眼睛做的事情。

我有一张包含我要更新的行的表格:

The table

它是一个显示我们数据库中潜在重复记录的表格。有一个存储过程可以根据客户帐户的数据创建一个条件字段,如果两条记录中的条件字段匹配,则会将它们标记为可能的重复项。

我们有一些已知的重复项,我们不久前必须创建Placeholder作为姓氏。

标准字段与其他'真实'匹配。我们想要保留真实姓氏的记录。

我想做的是:

  1. Placeholder的状态更新为Delete;和真实的'那些Keep(即使我可以完全闪耀!)
  2. 更新Placeholder个的保留ID字段,使其成为具有匹配条件字段的行的customer_no字段
  3. 完成后,另一个存储过程将从那里开始。

    帮助!

1 个答案:

答案 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来实现。