我在CentOS 5.1上使用MySQL 5.0.45。
SELECT DISTINCT(email) FROM newsletter
返回217259行
SELECT COUNT(DISTINCT(email)) FROM newsletter
为计数返回180698。
SELECT COUNT(*) FROM (SELECT DISTINCT(email) FROM newsletter) AS foo
为计数返回180698。
不应该所有3个查询都返回相同的值吗?
这是简报表的架构
CREATE TABLE `newsletter` ( `newsID` int(11) NOT NULL auto_increment, `email` varchar(128) NOT NULL default '', `newsletter` varchar(8) NOT NULL default '', PRIMARY KEY (`newsID`) ) ENGINE=MyISAM;
更新:我发现如果我在第一个查询中添加WHERE
子句,那么我会得到正确的结果。 WHERE
子句不会影响结果。
SELECT DISTINCT(email) FROM newsletter WHERE newsID > 0
答案 0 :(得分:2)
您是否可以将不同的结果相交以查看额外的行是什么?
答案 1 :(得分:2)
我的猜测是电子邮件列中有一些空值。尝试
select count(*) from newsletter where email is null;
答案 2 :(得分:0)
在第一种情况下,如果将其更改为“select distinct(email) from newsletter order by email;
”会发生什么?我认为它不应该有所作为,但可能会有所不同。
答案 3 :(得分:0)
是的,作为Maglob said,您可能会在电子邮件列中收到一些NULL。尝试使用类似的东西:
SELECT COUNT(COALESCE(email, 0)) FROM newsletter
这会给你你期望的结果。等一下。该定义表明电子邮件不接受NULL值。如果情况确实如此,则很奇怪。
答案 4 :(得分:0)
一种可能的解释是在两个查询之间从表中删除了行。但是我假设你已经按照各种顺序多次运行这些,所以我怀疑是这样。
您从此查询中获得了哪些行数:
SELECT email FROM newsletter GROUP BY email;