加入2选择语句并将第二个限制为第一个的结果

时间:2012-09-20 06:59:16

标签: mysql sql database join

我正在尝试将一个内部选择的前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很大。

1 个答案:

答案 0 :(得分: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