1

剥离外层后改变了问题

我正在使用 MySQL 5.1

select s.status, street, m.meterpointid
from meterpoint m inner join account a
     on ( m.accountid = a.accountid) inner join
     meterservice s
     on ( m.meterpointid = s.meterpointid )
where a.citystateid=1 and m.meterpointid=3008 and m.lastupdate is not null 
group by status, street ;

上面的查询返回

1   210 S HWY 3 3008

select s.status, street, m.meterpointid
from meterpoint m inner join account a
     on ( m.accountid = a.accountid) inner join
     meterservice s
     on ( m.meterpointid = s.meterpointid )
where a.citystateid=1 and m.lastupdate is not null 
group by status, street ;

但是上面查询的输出与前面没有的查询完全相同,m.meterpointid=3008但不包含1 210 S HWY 3 3008

有任何想法吗?

谢谢娜仁

4

3 回答 3

0

内部查询的更改正在更改外部查询中的计数,因此having count(*) = 1不再正确。我发现诊断这类事情的最佳方法是剥离外层并查看内部查询,直到我弄清楚发生了什么。

于 2012-12-04T20:43:48.520 回答
0

这一点也不奇怪。您正在使用 MySQL 的一个(错误)功能,称为Hidden Columns。也就是说,select子句中有不在group by子句中且不在聚合函数中的列。

在这种情况下,为该值选择任意值。

要解决此问题,请执行以下操作:

group by status, street, m.meterpointid

或者

select s.status, street, min(m.meterpointid)

这些将修复查询,因此结果是确定的。

于 2012-12-04T21:42:11.793 回答
-1

不包括测试m.meterpointid=3008可以改变计数。如果,根据count(*) = 1,计数不是1结果被丢弃。如果第二个查询的子查询返回多条记录,则该结果将被丢弃。

于 2012-12-04T20:43:59.177 回答