如何在同一查询中返回不同的结果?



我试图在一个查询中返回不同的结果,特别是查询使用round.id字段返回特定competitionranking,现在有时这个表可以group.id字段进行增值,如果是这样,我只需要返回具有group.id可用最小值的排名,所以我创建了这个设计:

SELECT l.*,
t.name as team_name,
r.name AS rank_name,
r.color AS rank_color
FROM league_ranking l
LEFT JOIN team t ON l.team_id = t.id
LEFT JOIN competition_ranks r ON l.rank = r.id
INNER JOIN competition_groups g 
WHERE l.round_id = :round_id
AND l.group_id = (
SELECT MIN(l2.group_id)
FROM league_ranking l2
WHERE l2.round_id = :round_id
)

如果排名记录具有可用的group.id,则此方法有效,但如果此字段NULL则不会返回任何内容,这是league_ranking表数据的一个小示例:

| round_id | group_id | team_id
5         3         1045
5         3         1046
6         NULL      1047
6         NULL      1048

如果我搜索round.id5,将返回前两条记录,但如果改为我搜索round.id6,则不会返回任何内容。如果没有关联的group.id,如何构建查询以返回结果?

null

不是一个值,而是缺乏值。null = null返回null,而不是true,因此对于没有 id 的组,此查询将不起作用。

但是,您可以使用<=>而不是=来评估两个null是否相等:

SELECT l.*,
t.name as team_name,
r.name AS rank_name,
r.color AS rank_color
FROM league_ranking l
LEFT JOIN team t ON l.team_id = t.id
LEFT JOIN competition_ranks r ON l.rank = r.id
INNER JOIN competition_groups g 
WHERE l.round_id = :round_id
AND l.group_id <=> ( -- <=> used here instead of =
SELECT MIN(l2.group_id)
FROM league_ranking l2
WHERE l2.round_id = :round_id
)

相关内容

  • 没有找到相关文章

最新更新