在中使用mysql查找相反的结果

在中使用mysql查找相反的结果,mysql,subset,Mysql,Subset,我有两个mysql表,event_template和event_occurrence,其中event_occurrence有一个带有event_模板id的列。我想找到所有没有事件发生的事件模板 尝试此查询时,我得到0行: SELECT * FROM `event_template` where id NOT IN (SELECT event_template_id FROM event_occurrence) 请注意,event_模板有166行,此查询返回162行: SELECT * FROM

我有两个mysql表,event_template和event_occurrence,其中event_occurrence有一个带有event_模板id的列。我想找到所有没有事件发生的事件模板

尝试此查询时,我得到0行:

SELECT * FROM `event_template` where id NOT IN (SELECT event_template_id FROM event_occurrence)
请注意,event_模板有166行,此查询返回162行:

SELECT * FROM `event_template` WHERE id IN (SELECT event_template_id FROM event_occurrence)
您应该使用NOT EXISTS而不是NOT IN。这应该适合您:

SELECT * 
FROM event_template et
WHERE NOT EXISTS (SELECT NULL FROM event_occurrence eo where eo.event_template_id = et.id)

我想你可能正在处理一个空问题。看见虽然这个问题是特定于SQL Server的,但IN和NOT IN子句不是。@johncode好的,我以前不知道怎么做,谢谢。@RobertHarvey,ok看起来很棘手,不知道现在是否值得为我研究选择*从不存在的事件\u模板选择空从事件\u发生的事件\u模板\u id=event\u template.id一个微小的更改非常有效!在这种情况下,我猜您在event\u occurrence表中也有一个名为ID的列。我将把上面的查询更新为适用于这种情况的查询。