services
とextraFees
という2つのテーブルがあり、関連する1xnからservices.id = extraFees.serviceId
という2つのテーブルがあります。私の問題は、s.id
とs.category
の存在しない組み合わせに対して次のクエリを実行すると、すべてのフィールドがNULLのままで、まだ1 row(s) returned
になります。MIN()が0行の代わりに全NULL行を返すようにする
SELECT 100 + (s.feeRate * MIN(ef.extra)) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
私は番号またはNULLに置き換えるならば、私は0 row(s) returned
を取得するので、私は私が欲しいものである、犯人がMIN()
である知っています。
SELECT 100 + (s.feeRate * 5) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
SELECT 100 + (s.feeRate * NULL) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
なぜこのようなことが起こりますか?どのように回避できますか?
私はそのドキュメントを読んだことがありますが、MIN()が返すNULLが、最後のクエリで手動で指定したNULLとどのように違うのか分かりません。 – user3748908
@ user3748908「NULL」を使用するだけで集計計算がトリガーされないため、すべてのフィルタ処理が基本表に対して行われた後に、表示する行はありません。 'MIN'を使うと、常に行を返す集約演算が強制されます。フィルタリングが行われた後(行が返されない)、集計計算は空の結果セットに対して行われ、その結果、「NULL」値を持つ1つの行が生成されます。 – Glenn