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

これはまったく驚くべきことではありません。Hidden Columnsと呼ばれる MySQL の (誤った) 機能を使用しています。つまり、句に含まれておらず、集計関数にも含ま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、結果は破棄されます。2 番目のクエリの副選択が複数のレコードを返す場合、この結果は破棄されます。

于 2012-12-04T20:43:59.177 に答える