2011-07-23 13 views
1

私はマスターテーブル(table1)と詳細テーブル(table2)を持っているとしましょう。各マスターレコードには複数の詳細レコードがあります。これは私にTABLE1が持っているとして、レコードのとまったく同じ数を与えMySQL:WHEREステートメントがmaster-detailクエリに含まれていると異なる結果が表示される?

SELECT t1.id, count(t2.*) 
FROM table1 as t1 
LEFT JOIN table2 AS t2 ON t2.id=t1.id 
GROUP BY t1.id 

:今、私は、各masterrecordのためのすべてのdetailrecordsをカウントクエリをしたいです。

しかし、WHEREステートメントを追加して、0より大きいチェックフィールドを持つレコードのみをカウントすると、table1のすべてのレコードがもう取得されません。一致する詳細レコードのないものは、完全に除外されます。なぜこうなった?

SELECT t1.id, count(t2.*) 
FROM table1 as t1 
LEFT JOIN table2 AS t2 ON t2.id=t1.id 
WHERE t2.checkfield != 0 
GROUP BY t1.id 

(たぶん私はこの例のためにそれを簡素化しようとしたので、何か他のものは、私の本当のクエリに間違っているが、私は、私は右のそれを得たと思います)

+0

WHEREをANDに変更する... Nickのおかげで、自分自身のことを考えているはずです:)なぜNULLをチェックするWHERE文ではうまくいかなかったのですか? GROUP BY? – Dylan

答えて

0

WHERE句があることされて参加した結果を制限あなたが外部結合をしようとしている間にt2.checkfield != 0の行だけが残っていますが、それは不一致の行をすべて除外します!あなたはWHEREANDに変更する一方

、あなたは今 tab1 LEFT OUTER JOIN tab2 ON(tab1.id = tab2.t1_id AND some_condition)を持っている - しかし、これはまだ右の一致を持っていない左のレコードが含まれます外部結合、すなわちです。

関連する問題