Query是否以一致的结果返回?

时间:2012-12-04 20:30:39

标签: mysql sql join

剥离外层后改变了问题

我正在使用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

有什么想法吗?

由于 那仁

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

group by status, street, m.meterpointid

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

这些将修复查询,以便确定结果。

答案 2 :(得分:-1)

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