2015-06-04 62 views
0

我有一個table名爲Actor,只有一列City(CityId)。我想返回特定State(StateId)中的演員數量。然而,我得到的結果是我有City,CountyState(城市有CountyId,County有StateId)的單獨表格。我如何在T-SQL查詢中做到這一點?嵌套'哪裏'?

我有涉及嵌套的SELECT語句,像一個解決方案:

SELECT COUNT(1) 
    FROM Actor a 
    WHERE a.CityId IN 
      (SELECT CityId FROM City WHERE CountyId IN...) 

...但有一個更有效的方式來做到這一點?謝謝

+1

請把你的表的一些樣品和要求的結果 – Sachu

+1

您可以使用連接來使這個WOR k,這將是一個有效的方法 –

回答

2
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 
0

使用JOINS查詢您的數據。 我在這裏使用INNER JOIN。 假設您的城市表中有CountryId,您可以按照以下方式進行操作。 如果您的城市表中沒有countryId,則必須在狀態表上再應用一個INNER JOIN。

SELECT COUNT(1) FROM Actor a INNER JOIN 
City b ON a.CityId = b.CityId 
WHERE b.CountryId IN (...) 
0

您可以輕鬆地把JOINS對面,你有不同的表,然後使用Group By子句來找出從具體state演員的總數。

我已經根據我的猜測使用了列名,您可以使用數據庫中的原始名稱來更改它們。

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 
0

假設關係的名字,你可以做這樣的事情與聯接:

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你甚至不需要與國家加入,這將做到:

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