我有两个数据库表,团队(ID, NAME, CITY, BOSS, TOTALPLAYER
)和
播放器(ID, NAME, TEAMID, AGE
),两个表之间的关系是一对多,一个团队可以有很多玩家。
我想知道有没有办法在TOTALPLAYER
表中定义Team
列?
例如,如果有10个玩家TEAMID
为1,那么Team
表中ID
为1的行的TOTALPLAYER
列的值为10.如果我添加一个播放器,TOTALPLAYER
列的值最多为11,我不需要为它显式赋值,让它由数据库生成。有谁知道如何实现它?
BTW,数据库是SQL Server 2008 R2
答案 0 :(得分:9)
是的,你可以这样做 - 你需要一个函数来统计团队的玩家,并在计算列中使用它:
CREATE FUNCTION dbo.CountPlayers (@TeamID INT)
RETURNS INT
AS BEGIN
DECLARE @PlayerCount INT
SELECT @PlayerCount = COUNT(*) FROM dbo.Player WHERE TeamID = @TeamID
RETURN @PlayerCount
END
然后定义您的计算列:
ALTER TABLE dbo.Team
ADD TotalPlayers AS dbo.CountPlayers(ID)
现在,如果您选择,则每次调用该功能,对于所选的每个团队。该值不会保留在团队表中 - 每次从团队表中进行选择时,都会动态计算该值。
由于它的值没有持久存在,问题实际上是:它是否需要是表上的计算列,或者您是否可以使用存储的函数来计算播放器的数量(如果需要)?
答案 1 :(得分:2)
您不必将总数存储在表格中 - 可以在执行查询时计算,例如:
SELECT teams.*, COUNT(players.id) AS num_players
FROM teams LEFT JOIN players ON teams.id = players.team_id
GROUP BY teams.id;
这将创建一个额外的列" num_players"在查询中,这将是每个团队中球员数量的计数(如果有的话)。