避免在列列表中已计算的WHERE语句中重新计算值

时间:2011-06-22 09:37:13

标签: mysql

我真的很想不必在我的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

这是一个更复杂的查询的简化版本,但它说明了这个问题。 当然必须有一种方法来处理这个没有多个函数调用?

非常感谢帮助。感谢

1 个答案:

答案 0 :(得分:4)

使用HAVING

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

HAVING是在SELECT之后计算的,albumPhotoCount存在。