【问题标题】:How can I compare two tables and delete on matching fields (not matching records)如何比较两个表并删除匹配的字段(不匹配的记录)
【发布时间】:2010-10-14 05:06:14
【问题描述】:

场景:需要对 20,000 名成员进行抽样调查。调查样本量为 20000 名成员中的 3500 名。所有会员个人都在表 tblMember 中。前一年进行了同样的调查,被调查的成员在 tblSurvey08 中。会员数据可能会在一年中发生变化(例如新的电子邮件地址等),但 MemberID 数据保持不变。

如何从 tblMember 中删除包含 tblSurvey08 的 MemberID/记录,以创建要调查的潜在成员的新表(我们称之为 tblPotentialSurvey09)。同样,单个成员的记录可能与不同表中的不匹配,但 MemberID 字段将保持不变。

我对这些东西还很陌生,但我似乎在谷歌搜索解决方案时遇到了问题 - 我可以使用 EXCEPT 函数,但个人成员的记录不一定相同,从一个表到下一个表 - 只是 MemberID 可能是相同的。

谢谢

【问题讨论】:

    标签: sql sql-server duplicates


    【解决方案1】:
    SELECT
       * (replace with column list)
    FROM
       member m
    LEFT JOIN
       tblSurvey08 s08
       ON m.member_id = s08.member_id
    WHERE 
       s08.member_id IS NULL
    

    只会为您提供不在 08 调查中的成员。此连接比 NOT IN 构造更有效。 新表不是一个好主意,因为您正在复制数据。带有上述查询的视图会是更好的选择。

    【讨论】:

      【解决方案2】:

      如果我不理解您的问题,我提前道歉,但我认为这就是您的要求。您可以使用insert into 语句。

      insert into tblPotentialSurvey09
      select your_criteria from tblMember where tblMember.MemberId not in (
          select MemberId from tblSurvey08
      )
      

      【讨论】:

      • 那个“NOT IN”会很贵,因为它会包含很多值!
      • INSERT INTO 的问题是你必须先创建目标表。
      • @Ken White:这个问题专门命名了目标表。我没有添加目标表的要求。
      【解决方案3】:

      首先,我不会为了选择潜在成员而创建新表。相反,我会创建一个新的真/假 (1/0) 字段来告诉他们是否符合条件。

      但是,如果您仍想将数据复制到新表中,请执行以下操作:

      INSERT INTO tblSurvey00 (MemberID) 
        SELECT MemberID
        FROM tblMember m
        WHERE NOT EXISTS (SELECT 1 FROM tblSurvey09 s WHERE s.MemberID = m.MemberID)
      

      如果您只想按照我的建议创建一个新字段,类似的查询就可以完成。

      【讨论】:

        【解决方案4】:

        外部连接应该这样做:

        select m_09.MemberID 
        from tblMembers m_09 left outer join 
             tblSurvey08 m_08 on m_09.MemberID = m_08.MemberID 
        where 
        m_08.MemberID is null
        

        【讨论】:

          猜你喜欢
          • 2021-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-09
          • 1970-01-01
          相关资源
          最近更新 更多