Sql 如何比较两个表并删除匹配字段(不匹配记录)

Sql 如何比较两个表并删除匹配字段(不匹配记录),sql,sql-server,duplicates,Sql,Sql Server,Duplicates,情景:需要对20000名成员进行抽样调查。调查样本量为20000名成员中的3500名。所有会员个人都在表tblMember中。上一年进行了相同的调查,接受调查的成员在TBL调查08中。会员数据可能会在一年中发生变化(例如新的电子邮件地址等),但会员ID数据保持不变 如何从tblMember中删除包含tblSurvey08的MemberID/记录,以创建一个新的待调查潜在成员表(称之为tblPotentialSurvey09)。同样,单个成员的记录可能与不同表中的记录不匹配,但MemberID字段

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

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

我对这方面比较陌生,但我似乎在谷歌搜索解决方案时遇到了问题-我可以使用EXCEPT函数,但每个表中的每个成员的记录不一定相同-只是MemberID可能相同

谢谢

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调查中的成员。此联接比不在构造中的联接更有效。 新表不是一个好主意,因为您正在复制数据。使用上述查询的视图将是更好的选择

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

如果我不理解您的问题,我提前表示歉意,但我认为这正是您所要求的。您可以使用
insert-into
语句

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

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

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

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

但是,如果您仍然希望将数据复制到新表中,可以使用以下方法:

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

如果您只是想按照我的建议创建一个新字段,那么类似的查询也可以完成这项工作。

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

但是,如果您仍然希望将数据复制到新表中,可以使用以下方法:

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

如果您只是想按照我的建议创建一个新字段,则可以使用类似的查询来完成此任务。

外部联接应该可以:

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

外部联接应执行以下操作:

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

“不在”将是相当昂贵的,因为它将包括许多价值观!INSERT INTO的问题是您必须先创建目标表。@肯·怀特:这个问题专门为目标表命名。我没有添加目标表的要求,因为“不在”会包含很多值,所以会非常昂贵!INSERT INTO的问题是您必须先创建目标表。@肯·怀特:这个问题专门为目标表命名。我没有添加目标表的要求。