我有一个表格,其中包含比赛标识符和相应的球员/球队标识符,表示为
home
/ away
。
每个团队tid
由两名玩家组成,每个玩家都有自己的标识符pid
。
问题是在表matches
中我不知道列home
/away
是代表团队还是单个玩家。
我想为每场比赛添加代表主场球员/球队的球员标识符的列
home_ids
。我编写了以下查询,给出了 “结果:行值被误用”-错误
SELECT match_id,
CASE WHEN (SELECT pid FROM players WHERE m.home = pid)
IS NULL THEN (SELECT pid_1, pid_2 FROM teams WHERE m.home = tid)
ELSE (m.home, NULL)
END AS home_ids
FROM matches m
如何修改我的查询以使其按预期工作?
您拥有所需的所有数据,只是没有选择它。像这样的东西应该有帮助:
SELECT m.match_id, p.pid AS p_pid t.pid_1 AS t_pid_1, t.pid_2 AS t_pid_2
FROM matches m
LEFT JOIN players p
ON m.home = p.pid
LEFT JOIN teams t
ON m.home = t.tid
WHERE
NOT (
p.pid IS NULL AND
t.tid IS NULL
)
本质上,我们按照
m.home
匹配对应 ID 的标准选择所有存在球员或球队的比赛。您可能会面临的问题是 tid
可能等于 pid
,因此两者可能会混淆。