2011-11-18 70 views
2

這裏是我正在執行的查詢,它應該返回一個包含未滿的池的數據的表(members_nr < members_max)。如何在條件內使用子查詢結果的字段?

SELECT id, name, 
(
    SELECT COUNT(*) FROM pools_entries WHERE pool_id=p.id AND pending=0 
) AS members_nr, 
members_max, open 
FROM pools p 
WHERE id IN(1,2,3,4) AND members_nr < members_max; 

問題是MySQL不會將members_nr識別爲字段,因爲它是子查詢的結果。這個小問題有沒有邏輯解決方案?

任何幫助將不勝感激:)

+1

查找MySQL的'HAVING'關鍵字。 –

+0

謝謝,N.B! 這解決了我的問題! –

+0

沒有probs,與MySQL合作的好運:) –

回答

5

N.B.是正確的,你需要有條款。但爲了Google員工的利益,我會分享一些知識。

WHERE子句用於限制結果集到特定的記錄,它也用於優化。 Mysql使用WHERE子句來標識它可以用來加快查詢的索引。

HAVING子句在查詢結束時執行。它用於過濾記錄集。所以想象一下,你有一個與你的WHERE子句匹配的數據庫中的東西列表。然後,您可以使用HAVING在某些設置條件下進一步過濾該列表。

我的基本經驗法則是:如果您需要根據列的值進行選擇,請使用WHERE,如果您需要根據表中不是列的某個值進行選擇,請使用HAVING。

+0

非常有啓發性。 我感謝你把時間放在這個解釋中。 使用HAVING作爲子查詢別名效果很好;) –

+0

+1用於指出優化部分。 –

相關問題