首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL合并Insert With Duplicate

TSQL合并Insert With Duplicate
EN

Stack Overflow用户
提问于 2012-06-29 03:30:23
回答 1查看 1.4K关注 0票数 2

我有一个表,有重复的电子邮件地址,我只需要将其中一个插入到临时一个临时表连同其他两个字段。这里有很多例子,但我可以让它们中的任何一个工作,

我最终搜索了MERGE,得到了同样的结果。所有的唱片都被插入了--我迷路了。我尝试了许多不同的样本,但它总是插入所有记录。我回去确认电子邮件地址是不是真的是假的,他们是..下面是我现在所处的位置..

代码语言:javascript
复制
MERGE #EmailTable2 AS Target
USING (SELECT EMAIL, NAME, JOB_TITLE FROM b2b_cmas_list$ WHERE EMAIL IS NOT NULL) AS Source
ON (Target.EMAIL = Source.EMAIL)
 WHEN NOT MATCHED BY TARGET THEN
    INSERT (EMAIL, NAME, JOB_TITLE)
    VALUES (Source.EMAIL, Source.NAME, Source.JOB_TITLE)

OUTPUT $action, inserted.*, deleted.*;

因此,任何帮助正确解决此问题的方法都将是有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 03:41:34

这是不起作用的,因为SQL不知道您要选择包含相同电子邮件的两行中的哪一行。我的意思是:如果电子邮件是相同的,哪一对(名称和JOB_TITLE)是重要的,哪一对可以被丢弃?

一些提示:

  1. 如果选择哪个项目无关紧要,只需通过电子邮件选择MAX(名称)和MAX(JOB_TITLE)进行分组,即

通过电子邮件从b2b_cmas_list$组中选择电子邮件、最大(名称)、最大(JOB_TITLE)

但是要注意,这可能会损坏名称-作业_标题对(因为选择了最大值)。

  • 尝试使用ROW_NUMBER()覆盖()任意选择每组中的第1行。

  • 使用游标遍历行并跳过duplicates.

  • Use

  • CLR聚合,即同一电子邮件的合并名称和职务。

还有一点关于MERGE语句的注意事项。这并不像预期的那样工作,因为SQL一次检查所有行,而不是逐行检查。所以不是说如果一封电子邮件。即。"a@a.com“被插入,然后另一个不会被插入。只有当"a@a.com”在语句开头的表中时才有关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11251581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档