为什么这只返回1排?

时间:2014-11-22 00:25:07

标签: mysql

我正在尝试使用连接查询2个表。我希望得到2行但只得到1:

SELECT tmp.pk, tmp.domain, count(crawl.pk)
FROM (
    SELECT * FROM domains
    WHERE domain IN('www.google.com', 'www.yahoo.com')
    AND pk < 10000
) tmp
JOIN crawl ON crawl.domain=tmp.pk
AND crawl.date_crawled <= 3
HAVING COUNT(crawl.pk) < 1000

结果:

+-------+--------------------+-----------------+
| pk    | domain             | count(crawl.pk) |
+-------+--------------------+-----------------+
| 14929 | www.yahoo.com      |              88 |
+-------+--------------------+-----------------+
1 row in set (0.03 sec)

如果我删除&#39; www.yahoo.com&#39;从IN声明然后我得到www.google.com&#39;在结果中(因此,我知道www.google.com和www.yahoo.com都通过了我的标准)。

为什么它只返回1行,应该返回2?

2 个答案:

答案 0 :(得分:1)

不知道你为什么要使用子查询。试试这个...

SELECT d.pk, d.domain, count(c.pk)
FROM domains d
INNER JOIN crawl c ON d.pk = c.domain
WHERE d.pk < 10000
AND d.domain in ('www.google.com', 'www.yahoo.com')
AND c.date_crawled <= 3
GROUP BY d.pk, d.domain
HAVING COUNT(c.pk) < 1000

如果您仍有问题,请尝试删除HAVING条款以及d.pk < 10000

答案 1 :(得分:1)

这没有意义,因为tmp.pk假设小于10000,但你的示例记录集显示tmp.pk大于10000。

并且,您的加入看起来不正确。似乎您正在尝试使用数字字段加入基于字符串的字段。我具体指的是:crawl.domain=tmp.pk

我建议您尝试通过tmp.domain加入。

或者,我建议删除子查询并重构您的查询以代表@Phil在其答案中建议的更多内容。