【发布时间】:2023-03-23 14:59:01
【问题描述】:
我想创建一个 SQL 选择语句,它将 JOIN 几个表和 yeidl 结果。本质上,我有两个相互独立的表。一个表包含用户(假定它具有最新和正确的信息),我有一个名为玩家的放置持有者表。占位符表有一个标记为 userID 的列,该列设置为 NULL。当用户被识别为玩家时,用户 ID 的 NULL 值将替换为用户的唯一 ID。
这让我想使用 SQL 来测试 userID 是否为 NULL。我写了以下不起作用的语句
SELECT
teams.*, players.number, players.position, players.userId,
CASE WHEN players.userId IS NULL THEN players.id ELSE userPlayer.id END AS playerId,
CASE WHEN players.userId IS NULL THEN players.firstName ELSE userPlayer.firstName END AS firstName,
CASE WHEN players.userId IS NULL THEN players.lastName ELSE userPlayer.lastName END AS lastName,
CASE WHEN players.userId IS NULL THEN players.email ELSE userPlayer.email END AS email
FROM teams
LEFT JOIN players ON players.teamId = teams.id
LEFT JOIN users AS userPlayer ON userPlayer.id= players.userId
WHERE teams.id = (:t)
这似乎非常低效。有没有更好的办法?
谢谢
【问题讨论】:
-
您是否只想返回
Player对应的User的结果?或者,您想返回所有名玩家,有时userId会是NULL,有时不会? -
我想在玩家有对应用户时记录用户
-
上述语句确实有效,因为它现在循环遍历团队中的球员列表
-
有什么原因你不使用
COALESCE,而不是CASE WHEN... IS NULL...? -
我应该用 COALESCE(players.userId, userPlayer.xxxx) 替换 CASE 吗?