0

需要有关查询优化的指导。我有两个表 userEvents 和 events

userEvents
id |  userName | eventID

events
id |  name

我需要在 userEvents 中找到所有没有 eventID 的事件名称

select id, name
from  events
where id NOT IN ( select eventid
                  from userEvents
                  inner join events on events.id = userEvents.eventid
                  group by userEvents.eventID
                ) 

我能够得到结果。我想知道如何优化这个查询,因为有大量的行。

4

1 回答 1

3

您可以使用LEFT JOIN

SELECT e.*
FROM events AS e
LEFT JOIN userEvents AS v ON e.id = v.eventid
WHERE e.id IS NULL;

或者:删除INNER JOIN里面的子查询,你不需要它:

select id, name 
from  events 
where id NOT IN (select eventid 
                 from userEvents 
                 where eventid IS NOT NULL)

请注意:谓词对于来自列IN的值是不安全的,这就是我添加到子查询的原因。在这种情况下会更安全。NULLeventideventid IS NOT NULLLEFT JOIN

于 2013-05-16T07:43:06.457 回答