Sql 嵌套的“何处”?
我有一个名为Actor的表,其中只有一列是City CityId。我想返回特定状态StateId中的参与者数量。然而,我的问题是,我有单独的城市、县表,最后州市有CountyId,县有StateId。如何在T-SQL查询中实现这一点 我有一个包含嵌套Select语句的解决方案,类似于:Sql 嵌套的“何处”?,sql,Sql,我有一个名为Actor的表,其中只有一列是City CityId。我想返回特定状态StateId中的参与者数量。然而,我的问题是,我有单独的城市、县表,最后州市有CountyId,县有StateId。如何在T-SQL查询中实现这一点 我有一个包含嵌套Select语句的解决方案,类似于: SELECT COUNT(1) FROM Actor a WHERE a.CityId IN (SELECT CityId FROM City WHERE Co
SELECT COUNT(1)
FROM Actor a
WHERE a.CityId IN
(SELECT CityId FROM City WHERE CountyId IN...)
…但有没有更有效的方法?感谢使用联接查询您的数据。 我在这里使用内部连接。 假设您的City表中有CountryId,您可以按照以下方法进行操作。 若您的City表中并没有countryId,则必须在State表上再应用一个内部联接
SELECT COUNT(1) FROM Actor a INNER JOIN
City b ON a.CityId = b.CityId
WHERE b.CountryId IN (...)
您可以轻松地将联接放在现有的不同表中,然后使用GROUPBY子句找出特定状态的参与者总数
我根据我的猜测使用了列名,您可以使用数据库中的原始名称更改它们
SELECT StateId,
Count(ActorId) AS Total
FROM ACTOR
INNER JOIN City ON Actor.CityId = City.CityId
INNER JOIN County ON County.CountyId = City.CountyId
INNER JOIN State ON State.StateId = County.StateId
GROUP BY State.StateId
假设使用关系名称,可以对联接执行以下操作:
select s.ID, s.Name, count(*)
from Actors a
inner join Cities c on c.ID = a.CityID
inner join County cn on cn.ID = c.CountyID
inner join State s on s.ID = cn.StateID
group by s.ID, s.Name
如果您只需要StateId,甚至不需要加入states,则可以:
select cn.StateID, count(*)
from Actors a
inner join Cities c on c.ID = a.CityID
inner join County cn on cn.ID = c.CountyID
group by cn.StateID
请把你的表格和所需的结果的一些样本,你可以使用连接使这项工作,这将是一个有效的方法
You can use this query to get your output
----------------------------------------------------------
SELECT COUNT(ActorId)
FROM Actor a
INNER JOIN City c ON a.cityId = c.cityId
INNER JOIN Country con ON c.countryId = con.countryId
INNER JOIN STATE s ON con.stateId = s.stateId
GROUP BY s.stateId