Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 嵌套的“何处”?_Sql - Fatal编程技术网

Sql 嵌套的“何处”?

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

我有一个名为Actor的表,其中只有一列是City CityId。我想返回特定状态StateId中的参与者数量。然而,我的问题是,我有单独的城市、县表,最后州市有CountyId,县有StateId。如何在T-SQL查询中实现这一点

我有一个包含嵌套Select语句的解决方案,类似于:

  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