我试图在一个查询中返回不同的结果,特别是查询使用ranking
字段返回特定competition
的{{1}},现在有时该表可以具有该字段round.id
价格很高,如果需要的话,我只需要返回具有最低可用值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
5,将返回前两个记录,但是如果我搜索round.id
6,则不会返回任何记录。如果没有关联round.id
,如何构造查询以返回结果?
答案 0 :(得分:11)
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
)