2016-06-18 8 views
0

Ich habe zwei hypothetische TabellenWie erhalten Sie Spalten, die in einer anderen Tabelle referenziert werden, mehrmals? So in SQL Server

  • Country (Countrycode, Countryname)
  • Groups (GroupId, Gruppenname, Countrycode)

Ich weiß, dass Gruppe ein reserviertes Wort ist, aber es ist nur um des Beispiels willen

Was ich bekommen möchte, ist die Länder mit 3 oder mehr Gruppen ohne die Verwendung einer anderen Referenztabelle.

Ich habe versucht, die folgenden

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) 

Aber ich bekomme keine Ergebnisse I die folgenden Daten in meiner Groups Tabelle haben:

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

Das Ergebnis, das ich will, ist:

|CountryCode| CountryName| 
| USA |UnitedStates| 

weil dort 3 Gruppen mit CountryCode = USA

+1

das Entfernen von Versuchen Where-Klausel innerhalb der geschachtelten Auswahl –

Antwort

1

diejenigen Ländercode Erhalten Sie mithilfe von GROUP BY und Mit dann das Ergebnis Join mit Country Tabelle, werden Sie Ihre erwartete Ergebnis.

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 

UPDATE JOIN ohne

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

danke kann das ohne innere verbindung gelöst werden? nur neugierig –

+0

Es ist 3 oder mehr, Ihre Having-Klausel sollte zählen (*)> = 3' –

+0

@ LucasAraujo, Ja können Sie das tun ohne innere beitreten. Überprüfen Sie den aktualisierten Teil. –

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

Warum zählen verschiedene Gruppennamen? Gruppenname ist nicht eindeutig, was ist, wenn zwei verschiedene Gruppen den gleichen Namen haben? –

1

Sie fast wahr sind ohne where-Klausel Aber Antwort von @Mahedi Sabuj für die Leistung besser ist

SELECT * 
FROM Country c 
WHERE CountryCode IN 
       (
        SELECT g.CountryCode 
        FROM Group g 
        GROUP BY g.CountryCode 
        HAVING COUNT(*) > 3 
       ) 
Verwandte Themen