0

我正在尝试将前 100 个结果从一个内部选择加入到第二个。

我的例子有点做作,但我有一个电子邮件地址表,其中许多被标记为脏地址,还有一个我将电子邮件和姓名映射到的观察表(它们都包含此表中的主键)。我希望结果是每个电子邮件地址的不同名称的数量。

SELECT ea.email, tmp.uniques FROM 
  (SELECT email FROM emails WHERE dirty = 1 LIMIT 100) ea
  INNER JOIN 
  (SELECT email, COUNT(DISTINCT(name)) as uniques FROM nameEmailObservations GROUP BY email ) tmp 
  ON (tmp.email = ea.email);

该查询似乎有效,但需要很长时间。知道为什么或我能做什么吗?我怀疑这是因为第二个查询的结果不限于第一个查询。第二个查询本身确实需要很长时间,因为nameEmailObservations它很大。

4

1 回答 1

1

一定:

SELECT 
    e.email,
    COUNT(DISTINCT neo.name)
FROM 
    emails e
INNER JOIN
    nameEmailObservations neo
ON
    e.email = neo.email
WHERE
   e.dirty = 1
GROUP BY
    e.email
LIMIT 100

是你想做的吗?

如果LIMIT是导致问题的原因(即仅在查询结束时应用),那么:

SELECT 
    email,
    COUNT(DISTINCT name)
FROM 
    nameEmailObservations
WHERE
    email IN
    (SELECT email FROM emails WHERE dirty = 1 LIMIT 100)
GROUP BY
    email
于 2012-09-20T07:04:51.360 回答