SQL Server选择不包括连接表的数据
我需要选择连接表中不存在的数据 所以有三张桌子 TrialTable(trialID、TrialName) 志愿者表(志愿者ID、志愿者姓名) JunctionTAble(JunctionTableIs、TrialID、名称)SQL Server选择不包括连接表的数据,sql,sql-server,Sql,Sql Server,我需要选择连接表中不存在的数据 所以有三张桌子 TrialTable(trialID、TrialName) 志愿者表(志愿者ID、志愿者姓名) JunctionTAble(JunctionTableIs、TrialID、名称) 每次试验都会向志愿者发送一封电子邮件,但下次我想排除已收到该试验电子邮件的志愿者,只向未收到该试验电子邮件的志愿者发送电子邮件,因此,我创建了连接表,该表与试验和志愿者之间存在多对多关系假设您对@TrialId有一个变量或某些东西,您当前想要的是: SELECT *
每次试验都会向志愿者发送一封电子邮件,但下次我想排除已收到该试验电子邮件的志愿者,只向未收到该试验电子邮件的志愿者发送电子邮件,因此,我创建了连接表,该表与试验和志愿者之间存在多对多关系假设您对@TrialId有一个变量或某些东西,您当前想要的是:
SELECT *
FROM VolunteerTable v
WHERE NOT EXISTS(SELECT 1
FROM JunctionTable j
WHERE j.VolunteerName = v.VolunteerName
AND j.TrialID = @TrialId)
您可能应该在Junition表中输入志愿者ID,而不是名称。Karl,同意我的意思,我想在junction表中写入志愿者ID,感谢您的解决方案,但为什么在子查询中选择1为什么不选择*@GROVER_SYAAN:这是习惯性的微优化。查询优化器将SELECT*扩展到列列表,以确定它不需要它们中的任何一个。选择1避免那一点点工作。超过这一点,性能将是相同的。[更多详细信息,请参见。]