我的数据库中有 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 我正在使用的表格的图像已上传 提前感谢大家
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