Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server选择不包括连接表的数据_Sql_Sql Server - Fatal编程技术网

SQL Server选择不包括连接表的数据

SQL Server选择不包括连接表的数据,sql,sql-server,Sql,Sql Server,我需要选择连接表中不存在的数据 所以有三张桌子 TrialTable(trialID、TrialName) 志愿者表(志愿者ID、志愿者姓名) JunctionTAble(JunctionTableIs、TrialID、名称) 每次试验都会向志愿者发送一封电子邮件,但下次我想排除已收到该试验电子邮件的志愿者,只向未收到该试验电子邮件的志愿者发送电子邮件,因此,我创建了连接表,该表与试验和志愿者之间存在多对多关系假设您对@TrialId有一个变量或某些东西,您当前想要的是: SELECT *

我需要选择连接表中不存在的数据 所以有三张桌子

TrialTable(trialID、TrialName) 志愿者表(志愿者ID、志愿者姓名) JunctionTAble(JunctionTableIs、TrialID、名称)


每次试验都会向志愿者发送一封电子邮件,但下次我想排除已收到该试验电子邮件的志愿者,只向未收到该试验电子邮件的志愿者发送电子邮件,因此,我创建了连接表,该表与试验和志愿者之间存在多对多关系

假设您对@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避免那一点点工作。超过这一点,性能将是相同的。[更多详细信息,请参见。]