两支球队的随机球员 SQL

问题描述 投票:0回答:1

table from where teamID and PlayerId fetching

我的数据库中有 2 支球队,
以及一个包含 PlayerID 和 TeamID 的表。必须从双方随机选择玩家并且自动使用 teamId 而不是手动输入 ids

WITH RandomPlayers AS (
    SELECT
        tp.PlayerId,
        tp.TeamId,
        ROW_NUMBER() OVER (PARTITION BY tp.TeamId ORDER BY NEWID()) AS RowNum
    FROM
        TeamPlayerMapping tp
    WHERE
        tp.TeamId IN (15, 19)
)
INSERT INTO Match (Player_1_id, Player_2_id)
SELECT
    Team1.PlayerId AS Player1Id,
    Team2.PlayerId AS Player2Id
FROM
    (SELECT PlayerId, RowNum FROM RandomPlayers WHERE TeamId = 15 ) AS Team1
CROSS APPLY (
    SELECT TOP 1 PlayerId
    FROM RandomPlayers Team2
    WHERE Team2.TeamId = 19 AND Team2.RowNum = Team1.RowNum
    ORDER BY NEWID()
) AS Team2
WHERE
    NOT EXISTS (
        SELECT 1
        FROM Match m
        WHERE (m.Player_2_id = Team2.PlayerId)
           OR (m.Player_1_id  = Team1.PlayerId)
);

用于此目的的表格

MapId  TeamId PlayerID
254       15    31
255        19   34
256         15  35
257        19   30
258        15   29
259        19   33
260        15   32
261        19   36                       
MatchID Player_1_id  Player_2_id
258             35           36
259             29           34
260              31          36 
261             32           36

此代码适用于 team1,但不适用于 team 2 我也想自动获取 teamId 我正在使用的表格的图像已上传 提前感谢大家sql output

sql sql-server select random
1个回答
0
投票
SELECT t1.PlayerId, t2.PlayerId
FROM (SELECT PlayerId, row_number() over (order by newid()) as R
      FROM TeamPlayerMapping
      WHERE TeamId=15) t1
INNER JOIN (
     SELECT PlayerId, row_number() over (order by newid()) as R
     FROM TeamPlayerMapping
     WHERE TeamId = 19
) t2 ON t1.R = t2.R
  • 为每个玩家分配一个唯一的行号

  • INNER JOIN
    团队。

我的假设是两支球队拥有相同数量的玩家,并且playerId是唯一的。

参见:DBFIDDLE

© www.soinside.com 2019 - 2024. All rights reserved.