【问题标题】:MSSQL How to merge rows in single tableMSSQL如何合并单个表中的行
【发布时间】:2016-02-03 08:45:28
【问题描述】:

在编程方面,我真的是个新手。我一直在使用用 C# MVC5 编写的 Web 应用程序。我将 MSSQL 用于我的数据库和一些编程模型,例如 Linq 和 Entity Framework。

到目前为止,我需要处理的是合并具有相同内容的单个表中的行。

例如 我有以下表格,其中包含以下列:

表格contact_type

[socialId][socialName][webUrlTemplate]
rated_merge
[mergeId][timestamp][ratedId]

rated*

[ratedId][fname][lname][mergeId][ratings]
表**rated_contact

[id][ratedId][socialId][value]

我有一个表单,用户可以在其中输入他们的社交网络/约会网站用户名/ID,在其中提交后,表单的内容将保存到 ratedrated_contact 表中。

提交表单后,它会首先检查表单在 ratedrated_contact 表中是否有匹配的记录。 如果没有匹配的记录,表格内容将被保存为新记录。

但是如果有匹配,这就是合并发生的地方 (仅当系统检测到来自 from 的用户名是否与数据库中的任何用户名匹配时才会发生匹配)。将比较匹配的行,将创建一个新记录,其中包含比较行的所有差异和匹配项。然后之前的记录将被标记为已删除。这条新记录将完善被评级人员的个人资料。

创建合并后,rated_contact 表中的 [ratedId] 列将更新为新创建的合并记录中的 [ratedId]。然后使用 rated_merge 表,我需要插入一个包含 [timestamp]、[ratedId] 和 [mergeId] 的新记录,这是一个自动增量字段。

我需要获取 [mergeId] 并更新 rated 表中所有匹配记录的 [mergeId] 列。

对我应该采取什么方法有什么建议吗?

谢谢大家。

【问题讨论】:

  • 你有什么共同的ID吗?哪个唯一标识用户 ii 无论该用户提供的 twitter、facebook id 是什么?
  • 我不得不问,为什么这些“重复”行首先存在?它们是如何被插入到数据库中的
  • @Viru 是的,每个名字都有一个对应的userId作为主键。
  • @Takarii 该应用程序是一个人员评级应用程序。一个被评价的人可以被许多用户多次评价,这就是为什么表中可能存在重复的行。 (^_^)
  • 您应该根据初始表中的 PK 检查该表是否存在 FK,然后如果存在则更新该行,否则您插入。这种整个重复行的情况首先不应该存在。

标签: c# sql-server entity-framework linq merge


【解决方案1】:

你可以使用这个查询

select fullname,max(facebook_id) facebook_id,max(twitter_id)twitter_id,max(insta_id)insta_id from member group by fullname

【讨论】:

    【解决方案2】:
    insert into table_to_insert 
    ([fullname],[facebook_id],[twitter_id],[insta_id])
    select [fullname],isnull(t1.[facebook_id],t2.[facebook_id]),isnull(t1.[twitter_id],t2.[twitter_id]),isnull(t1.[insta_id],t2.[insta_id])
    from tablesource1 t1
    inner join
    tablesource2 t2
    on t1.fullname=t2.fullanme
    

    也许对你有帮助

    【讨论】:

    • 因为您的表中没有 id,所以在这种情况下,您的示例说名称是您要加入的点并将 id-s 写入名称。因此,请说明您认为没有唯一 ID 的情况下它会如何工作?
    • 首先..我没有问过这个问题..检查问题的 cmets...我确实问过 OP 是否有唯一 ID,他提到有唯一的用户 ID... .所以你也应该在发布错误答案之前与用户澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多