假设我有3张桌子
Countries ProvOrStates MajorCities
-----+------------- -----+----------- -----+-------------
Id | CountryName Id | CId | Name Id | POSId | Name
-----+------------- -----+----------- -----+-------------
1 | USA 1 | 1 | NY 1 | 1 | NYC
你如何得到像
这样的东西 ---------------------------------------------
CountryName | ProvinceOrState | MajorCities
| (Count) | (Count)
---------------------------------------------
USA | 50 | 200
---------------------------------------------
Canada | 10 | 57
到目前为止,我看到它的方式:
是否有可能只运行一个查询而不是多个中间查询?我不知道它是否可行,因为我试过没有运气。
感谢您的帮助
答案 0 :(得分:0)
使用子查询或派生表和视图
基本上如果你有3张桌子
select * from [TableOne] as T1
join
(
select T2.Column, T3.Column
from [TableTwo] as T2
join [TableThree] as T3
on T2.CondtionColumn = T3.CondtionColumn
) AS DerivedTable
on T1.DepName = DerivedTable.DepName
当你100%肯定它正在工作时,你可以创建一个包含你的三个表加入的视图,并在你想要的时候调用它
PS:如果列名相同或者收到此消息 "列' ColumnName'被多次指定为表格'。 " 您可以使用别名来解决此问题
答案 1 :(得分:0)
这个答案来自@lotzInSpace。
SELECT ct.[CountryName], COUNT(DISTINCT p.[Id]), COUNT(DISTINCT c.[Id])
FROM dbo.[Countries] ct
LEFT JOIN dbo.[Provinces] p
ON ct.[Id] = p.[CountryId]
LEFT JOIN dbo.[Cities] c
ON p.[Id] = c.[ProvinceId]
GROUP BY ct.[CountryName]
它在工作。我使用的是LEFT JOIN
而不是INNER JOIN
因为,如果一个国家没有省份,或省没有城市,那么该国家或省份不会; t显示。
再次感谢@lotzInSpace。