SQL - LEFT OUTER JOIN和WHERE子句

use*_*192 5 sql join

我在SQL上很糟糕.我不知道我想做什么是可能的.但是,由于我们的数据结构,我需要以这种方式解决这个问题或进行大规模的架构更改.

我试图计算一个国家的'省'(又名国家)的数量.但是,只有少数省份需要被忽视.因此,我试图检索一个国家列表,其中包括每个国家的省份数量.

举个例子,我需要查询美国,并忽略计数中的"华盛顿特区".原因是因为根据我们的要求,华盛顿特区不是一个州.这是我现在正在尝试的东西(它不起作用):

SELECT
  c.Name AS 'CountryName',
  ISNULL(COUNT(p.[ID]), 0) as 'ProvinceCount'
FROM 
  Country c LEFT OUTER JOIN [Province] p ON p.[CountryID]=c.[ID]
WHERE
  c.[ID]=@idParameter and
  p.[Name] <> 'Washington D.C.'
Run Code Online (Sandbox Code Playgroud)

可以想象,当idParameter与美国匹配时,此查询不会返回任何结果.

在异常情况下如何获得正确的计数?非常感谢您的帮助.

Kir*_*rst 9

您需要一个GROUP BY子句来获得正确的计数,并且您需要一个外部联接来为没有有效省份的国家/地区显示"0"值.

select
  c.Name as 'CountryName',
  isnull(count(c.Name), 0) as 'ProvinceCount'
from
  Country c
left outer join
  Province p on
  p.CountryID = c.[ID]
where
  c.[ID] = @idParameter
  and p.[Name] not in ('Washington D.C', 'Another State')
group by 
  c.Name
Run Code Online (Sandbox Code Playgroud)