【问题标题】:Updating specific fields based on matching against data already in the table根据与表中已有数据的匹配更新特定字段
【发布时间】:2014-02-01 16:13:25
【问题描述】:

我有一个由以下字段组成的表: Location_ID、User_ID、Last_Name、First_Name、生日、SSN

我正在尝试将它与另一个包含相同架构的表合并。但是,需要注意的是,由于应用程序的不同版本,用户可能存在于两个表中并且具有不同的 User_ID。如果我只是简单地合并它们,我会得到重复,其中一个 Last_Name、First_Name、Birthday、SSN 可能有两个与之关联的 User_ID。

我想要做的是将我的新数据集合并到旧数据集,匹配 Last_Name、First_Name、Birthday 和 SSN,并且仅在没有与以前匹配的条目时添加具有新 User_ID 的用户四个约束。我不知道执行此操作的正确方法。有什么建议?

【问题讨论】:

  • 请在问题本身中发布您遇到困难的代码。
  • 必须同意@FreshPrinceOfSO,因为我们需要先了解您如何尝试您正在做的事情,然后我们才能为您提供帮助……为每个人提供更好的起点一起工作。

标签: sql


【解决方案1】:

我会尝试以下方法。对于您要插入/更新的每条记录,首先检查是否存在具有匹配字段(First_Name、Last_Name 等)的行,如果存在与之匹配的行,则运行更新命令,否则插入。

【讨论】:

    【解决方案2】:

    这是一种使用标准 SQL 的方法:

    insert into t1(User_ID, Last_Name, First_Name, Birthday, SSN)
        select User_ID, Last_Name, First_Name, Birthday, SSN
        from t2
        where not exists (select 1
                          from t1
                          where t1.Last_Name = t2.Last_Name and
                                t1.First_Name = t2.First_Name and
                                t1.Birthday = t2.Birthday and
                                t1.SSN = t2.SSN
                         );
    

    提供了 SQL,我怀疑它在这种情况下不会真正起作用。通常,当您遇到此类问题时,两个表中的内容格式也会略有不同。例如,一个可能有第一个名字首字母,另一个可能有完整的名字。或者,一个可能在姓氏的后缀前面有一个逗号,而另一个没有逗号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多