SELECT .. IN(..)的替代方案

ale*_*pro 1 sql select subquery sql-subselect

我有3列的表:id(人),城市(访问过的人)和日期(他的访问).我需要选择在特定日期之间在洛杉矶市的所有人(他们的ids),他们也在其他特定日期在纽约市.

以下是我现在运行的查询示例:

SELECT DISTINCT id 
FROM places 
WHERE date >= '2011-03-18' AND 
      date < '2011-03-19' AND 
      city = 'los angeles' AND 
      id IN (SELECT DISTINCT id 
             FROM places 
             WHERE date >= '2011-03-15' AND 
                   date < '2011-03-16' AND 
                   city = 'chicago' 
             GROUP BY id);
Run Code Online (Sandbox Code Playgroud)

还有什么我也可以吗?我可以使用其他任何查询吗?这个选择太慢了.

ber*_*nie 8

使用连接(使用别名)而不是子查询应该更好地执行:

  SELECT places.id 
    FROM places 
         JOIN places AS places2 ON places2.id = places.id
     AND places2.date >= '2011-03-15' 
     AND places2.date < '2011-03-16' 
     AND places2.city = 'chicago' 
   WHERE places.date >= '2011-03-18' 
     AND places.date < '2011-03-19' 
     AND places.city = 'los angeles' 
GROUP BY places.id;
Run Code Online (Sandbox Code Playgroud)