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

期待される出力例を指定していませんが、大人の名前と子供の名前を表示したいことは理解しています。

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 に答える
0

サチンが言ったこと。ユニオン部分を取り除きます。おそらく意図したのは、次のように where 句を結合ステートメントから元のステートメントに移動することでした。

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 に答える