Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL使用另一行的信息更新行(新手)_Sql - Fatal编程技术网

SQL使用另一行的信息更新行(新手)

SQL使用另一行的信息更新行(新手),sql,Sql,我是SQL新手,所以请温柔一点!我在伦敦的一家慈善机构工作,所以我尝试了SQL,我被一些你们都可以闭上眼睛做的事情困住了 我有一个包含要更新的行的表: 这是一个显示数据库中潜在重复记录的表。有一个存储过程,它根据客户帐户上的数据创建标准字段,如果两个记录中的标准字段匹配,它们将被标记为可能的重复项 我们有一些之前必须创建的已知副本,它们的姓氏是占位符 Criteria字段将其他“真实”记录与我们希望保留的真实姓氏相匹配 我想做的是: 将占位符的状态更新为删除;而那些“真正”的要保留的(就连我也

我是SQL新手,所以请温柔一点!我在伦敦的一家慈善机构工作,所以我尝试了SQL,我被一些你们都可以闭上眼睛做的事情困住了

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

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

我们有一些之前必须创建的已知副本,它们的姓氏是
占位符

Criteria字段将其他“真实”记录与我们希望保留的真实姓氏相匹配

我想做的是:

  • 占位符的状态更新为
    删除
    ;而那些“真正”的要保留的
    (就连我也能闪电般地做到!)
  • 更新
    占位符
    占位符的keep ID字段,使其成为行中具有匹配条件字段的customer\u no字段
  • 完成后,另一个存储过程将从那里获取它


    救命啊

    大家好,欢迎来到堆栈溢出

    如果我理解正确,你需要这样的东西:

    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,则可以将其粘贴到查询窗口中并观察结果


    请告诉我们您使用的是哪种数据库,以供将来参考,因为答案因数据库而异。以上就是SQL Server。虽然大多数dbs的行为类似,但有些dbs的行为却不同。上面的更新是关于连接的。例如,Oracle不允许这样做,因此使用Oracle时的语法是不同的-Oracle当然可以实现相同的功能,它只是使用不同的SQL来实现。

    您好,欢迎使用堆栈溢出

    如果我理解正确,你需要这样的东西:

    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,则可以将其粘贴到查询窗口中并观察结果


    请告诉我们您使用的是哪种数据库,以供将来参考,因为答案因数据库而异。以上就是SQL Server。虽然大多数dbs的行为类似,但有些dbs的行为却不同。上面的更新是关于连接的。例如,Oracle不允许这样做,因此使用Oracle时的语法是不同的-Oracle当然可以实现相同的功能,它只是使用不同的SQL来实现。

    Howdy。。。两件事,你能标记你的数据库管理系统(SQLServer,oracle,mysql等)吗?另外,你能发布你到目前为止尝试过的吗?最后,如果您将数据作为表格而不是图像发布到Q中,我们将更容易处理这些数据。请花点时间做一个简单的回答,同时也请阅读,以便更好地回答您的问题。。。两件事,你能标记你的数据库管理系统(SQLServer,oracle,mysql等)吗?另外,你能发布你到目前为止尝试过的吗?最后,如果您将数据作为表格而不是图像发布到Q中,我们将更容易处理这些数据。请花点时间做一个简单的回答,同时也请阅读,以便更好地回答您的问题。谢谢!我稍微修改了一下,它完全起作用了。注意到数据库的事情-我甚至没有想到这一点。这是在SQL Server 2014上发布的(我相信是T-SQL)。很高兴能提供帮助。谢谢!我稍微修改了一下,它完全起作用了。注意到数据库的事情-我甚至没有想到这一点。这是在SQL Server 2014上发布的(我相信是T-SQL)。很高兴能提供帮助。