2011-06-22 66 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 

HAVINGSELECT後計算,當albumPhotoCount存在。

+0

非常感謝!這就是訣竅! – Cheeky