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

ds97pgxw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(300)

我试图在一个查询中返回不同的结果,特别是返回 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
)

如果排名记录有 group.id 可用,但如果此字段 NULL 什么都不会回来,一个小小的例子 league_ranking 表格数据:

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

如果我搜索为 round.id 5、将返回前两条记录,但如果改为我搜索 round.id 6、不退换货。如果没有查询,如何构造查询以返回结果 group.id 相关?

6rqinv9w

6rqinv9w1#

null 不是一个价值,而是一个缺点。 null = null 退货 null ,不是 true ,因此对于没有id的组,此查询将不起作用。
你可以用 <=> 而不是 = 不过,要评估两个 null s等于:

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
)

相关问题