jid*_*dic 10 mysql sql null select
我试图在一个查询中返回不同的结果,特别是查询返回ranking一个特定的competition 使用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
)
Run Code Online (Sandbox Code Playgroud)
这个工作如果排名记录有group.id可用,但是如果这个字段NULL什么也不会返回,表示league_ranking数据的一个小例子:
| round_id | group_id | team_id
5 3 1045
5 3 1046
6 NULL 1047
6 NULL 1048
Run Code Online (Sandbox Code Playgroud)
如果我搜索为round.id5,将返回前两个记录,但如果我搜索round.id6,则不会返回任何内容.如果没有group.id关联,我如何构造我的查询以返回结果?
Mur*_*nik 11
null不是价值,而是缺乏价值.null = null返回null,不是true,因此对于没有id的组,此查询将不起作用.
但是,您可以使用<=>而不是=将两个nulls 评估为相等:
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |