2011-06-22 17 views
3

すでに列リストで計算されたWHEREステートメントの値を再計算する必要はありません。既に列リストで計算されたWHEREステートメントの再計算値の回避

例えば、私はこれを行う必要があります:

SELECT albumId, fnAlbumGetNumberOfPhotos(album.albumId) AS albumPhotoCount 
FROM album 
WHERE albumIsActive = 1 
AND fnAlbumGetNumberOfPhotos(album.albumId) > 0 

をしかし、私はこのようにそれを行うことができない理由、または関数を呼び出す必要としない他の回避策があるかどうかを知りたいです再び:

SELECT albumId, fnAlbumGetNumberOfPhotos(album.albumId) AS albumPhotoCount 
FROM album 
WHERE albumIsActive = 1 
AND albumPhotoCount > 0 

これははるかに複雑なクエリの簡略化されたバージョンですが、問題を示しています。 確実に、複数の関数呼び出しをせずにこれを処理する方法が必要ですか?

お願いします。ありがとう

答えて

4

HAVINGを使用してください。

SELECT albumId, fnAlbumGetNumberOfPhotos(album.albumId) AS albumPhotoCount 
FROM album 
WHERE albumIsActive = 1 
HAVING albumPhotoCount > 0 

HAVINGalbumPhotoCountが存在する場合、SELECT後に計算されます。

+0

よろしくお願い致します。それはトリックです! – Cheeky

関連する問題