Fordi lande kan have flere stater, og hver stat kan have flere byer, når du slutter dig til disse 1 til mange og 1 til mange mange, er dit statstal oppustet. Så du har brug for den særskilte optælling af staten. Bytællingen er allerede unik for land og stat, og har derfor ikke brug for det særskilte. hvor da staten ikke er unik for landbyen, er der derfor behov for særskilt. Dette forudsætter naturligvis, at du vil have antallet af unikke stater i hvert land.
SELECT c.name, count(distinct s.name) as statecount, count(Ci.name) as CityCountFROM country cINNER JOIN stater s på c.id =s.country_IDINNER JOIN byer ci ON s.id =ci.state_idGROUP BY C.name
Eller behold din gamle stil join-notation:
VÆLG c.name, count(distinct s.name) as statecount, count(ci.name) citycount FROM lande c,stater s,byer ciWHERE ci.state_id =s.id og s.country_id =c .id GROUP BY s.name
Overvej følgende eksempel:http://rextester.com/ZGYF56786
eller billedmæssigt nedenfor
Se, hvornår sammenføjningerne sker mellem land, stat og by. tilstand bliver gentaget på grund af sammenføjningen til by, hvilket gør staten ikke længere unik i den kolonne, ved at gøre en distinkt returnerer vi kun et antal på 2 stater i stedet for 7, en for hver post.
+-----+------------+-------------+| USA | Illinois | Chicago || USA | Illinois | Springfield || USA | Illinois | Peoria || USA | Californien | LosAngeles || USA | Californien | Sacramento || USA | Californien | SanDeigo || USA | Californien | Hollywood || USA | Californien | Oakland ||-----|------------|------------------||Navn | statantal | Bytælling || USA | 2 | 7 | <-- Er dette resultat korrekt? (det håber jeg)| USA | 7 | 7 | <-- eller denne? (hvorfor så gider bare tælle(*) og kun 1 optælling er nødvendig.+-----+------------+-------+
Jeg vil tro, du vil have det 1. resultat, da der kun er 2 stater i USA-tabellen og 7 byer.