2016-11-08 57 views
0

我有兩個表,AB,其中B有外鍵A的數量(即A可以有零或多個孩子在B而每個B記錄恰好屬於一個A記錄)。取父表的記錄,這取決於兒童

現在我想從A獲取所有記錄,其中在B兒童的數量低於X(包括)。

如何實現聚合函數的比較?

SELECT A.*, COUNT(B.id) AS child_cnt 
    FROM A 
    LEFT JOIN B 
     ON A.id = B.foreign_id 
GROUP BY A.id 

但是,我不能,當然child_cnt添加WHERE條件。任何指向如何達到預期結果的指針?

回答

1

可以使用具有過濾結果

SELECT A.*, ifnull(COUNT(B.id), 0) AS child_cnt 
FROM A 
LEFT JOIN B ON A.id = B.foreign_id 
GROUP BY A.id 
HAVING COUNT(B.id) < X 
2

使用HAVING

SELECT A.*, COUNT(B.id) AS child_cnt 
    FROM A 
    LEFT JOIN B 
     ON A.id = B.foreign_id 
GROUP BY A.id 
HAVING child_cnt < 17;