1

私のデータベースの構造は次のとおりです。

すべての地域(CountryStates)は多くの都市(Areas)を持つことができます。すべてAreaの人が多くの観光名所や名所を持っている可能性があります(POIs)。各地域にいくつのエリアとアトラクションがあるかをリストアップしたいと思います。ない場合は0を表示したい。

これは私の質問です:

SELECT Tab1.Reg AS Reg, CountAreas, CountPois
FROM
(SELECT 
        c.Name AS Reg, 
        COUNT(a.Id) AS CountAreas
FROM  
       CountryStates as c LEFT JOIN
       Areas AS a ON a.CountryStates_Id = c.Id
GROUP BY c.Name 
) as Tab1 left join
(SELECT 
        c1.Name AS Reg, 
        COUNT(p.Id) AS CountPois
FROM  
       CountryStates as c1 LEFT JOIN
       Areas AS a ON a.CountryStates_Id = c1.Id LEFT JOIN
       POIs AS p ON a.Id = p.Areas_Id
GROUP BY c1.Name 

) as Tab2 on Tab1.Reg = Tab2.Reg

このクエリを1つで行うにはどうすればよいSELECTですか?

4

1 に答える 1

1

このクエリは同じ結果を返します。

SELECT c.Name AS Reg, 
        COUNT(DISTINCT(a.Id)) AS CountAreas,
        COUNT(p.Id) AS CountPois
FROM CountryStates as c 
    LEFT JOIN Areas as a ON a.CountryStates_Id = c.Id
    LEFT JOIN POIs AS p ON a.Id = p.Areas_Id
GROUP BY c.Name 
于 2012-04-27T11:09:53.670 に答える