剥离外层后改变了问题
我正在使用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
有什么想法吗?
由于 那仁
答案 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
,则结果将被丢弃。如果第二个查询的子选择返回多个记录,则该结果将被丢弃。