1

表成人:

id, Adname   
1 , Harry 
2 , Sally 
3 , Beth 
4 , David

表儿童:

id, Chname  , adult_id , DOB(YYYY-MM-DD) 
1 , Rebecca , 1        , 5/23/1987 
2 , Stanley , 3        , 9/7/2003
3 , Emma    , 3        , 3/17/2000 
4 , Maria   , 4        , 11/8/1995
5 , Michael , 4        , 8/15/1998
6 , Jessica , 4        , 4/28/1991

查询:仅显示有 2 个或更多孩子的成人及其孩子。到目前为止,我有:

SELECT Adult.Adname, COUNT(Children.Adult_id) AS NumberOfChildren FROM (Adult
INNER JOIN Children
ON Adult.ID=Children.Adult_id)
GROUP BY Adname
HAVING COUNT (Children.Adult_id) > 2
UNION SELECT Adult.Adname, Children.Chname
FROM Adult LEFT JOIN Children ON Adult.[ID] = Children.[Adult_id]
WHERE Children.Adult_id <> NULL;

但结果仍然显示成人和儿童不到2 ??

4

3 回答 3

1

尝试

SELECT a.*, c.*
FROM Adults a
JOIN (
    SELECT AdultId
    FROM Children
    GROUP BY AdultId
    HAVING COUNT(*) >= 2
) n
ON n.AdultId = a.Id
JOIN Children c
ON c.AdultId = n.AdultId

演示

于 2013-07-02T22:15:04.390 回答
0

萨钦如是说。摆脱联合部分。可能打算将 where 子句从 unioned 语句移动到原始语句中,如下所示:

SELECT Adult.Adname, COUNT(Children.Adult_id) AS NumberOfChildren FROM (Adult
INNER JOIN Children
ON Adult.ID=Children.Adult_id)
WHERE Children.Adult_id <> NULL
GROUP BY Adname
HAVING COUNT (Children.Adult_id) > 2
于 2013-07-02T22:14:07.977 回答
0

尽管您没有指定预期的输出示例,但我知道您想显示成人的姓名和他们孩子的姓名:

SELECT Adult.Adname, Children.Chname
FROM Adult INNER JOIN Children
ON Children.Adult_Id = Adult.ID
WHERE Adult.ID IN
(SELECT Adult_id 
FROM Children
GROUP BY Adult_id
HAVING COUNT (Children.Adult_id) > 2)
于 2013-07-02T22:49:58.227 回答