2016-06-18 3 views
0

にだから、私はグループが予約語であるが、それはだということを知っている2つの架空のテーブル別のテーブルで参照されている列を特定の回数取得する方法はありますか? SQL Serverの

  • Country(国番号、COUNTRYNAME)
  • Groups(グループID、GroupNameの、国番号)

を持っています例のためだけです

私が得たいのは、別の参照表を使用しない3つ以上のグループの国です。

私は、次の

select * 
from Country c 
where CountryCode in (select g.CountryCode 
         from Group g 
         where g.CountryCode=c.CountryCode 
         group by g.CountryCode 
         having count(*) > 3) 

を試してみました。しかし、私は私が私のGroupsテーブルに次のデータを持っている与えられた何の結果を得るません:

|GroupId|GroupName|CountryCode| 
| 1 | 'asd' | USA | 
| 4 | 'fgh' | USA | 
| 3 | 'jkl' | USA | 
| 4 | 'zxc' | ARG | 

私が望む結果は次のとおりです。

|CountryCode| CountryName| 
| USA |UnitedStates| 

の3つのグループがあるため、CountryCode = USA

+1

は削除してください入れ子にされたselect内のwhere節 –

答えて

1

が、その後Countryテーブルで結果を参加持っとBY GROUPを使用して、それらの国コードを取得し、あなたの期待される結果を取得します。

select C.* 
from 
(
    select g.CountryCode 
    from Group g 
    group by g.CountryCode 
    having count(*) >= 3 
) CC 
INNER JOIN Country C ON C.CountryCode = CC.CountryCode 

しかし@Mahedi Sabujの回答は、パフォーマンスのためのより良いですあなたはせずに、ほぼ該当する登録しよう

select C.* 
from Country C 
WHERE C.CountryCode IN 
(
    select g.CountryCode 
    from Group g 
    group by g.CountryCode 
    having count(*) >= 3 
) 
+0

これは内部結合なしで解決できますか?ちょうど好奇心が強い –

+0

それは3つ以上です、あなたのHaving句は 'count(*)> = 3' –

+0

@ LucasAraujoを持つべきです、はい、内部結合なしでそれを行うことができます。更新された部分を確認してください。 –

0
Select c.CountryCode, c.CountryName 
FROM [Country] c 
INNER JOIN [Group] g ON c.CountryCode = g.CountryCode 
GROUP BY c.CountryCode, c.CountryName 
HAVING COUNT(DISTINCT GroupName) >= 3 
+0

なぜ異なるグループ名をカウントするのですか?グループ名が一意でない場合、2つの異なるグループが同じ名前を持つ場合はどうなりますか? –

1

なしUPDATE

SELECT * 
FROM Country c 
WHERE CountryCode IN 
       (
        SELECT g.CountryCode 
        FROM Group g 
        GROUP BY g.CountryCode 
        HAVING COUNT(*) > 3 
       ) 
関連する問題