目前,我正在处理Postgres数据库中的查询,并限制了添加到左联接的限制。以下是我的疑问:
SELECT
t.id AS "teamId",
t.name,
COALESCE(NULLIF(json_agg(Games.games)::TEXT, '[null]'), null)::JSON AS "games"
FROM teams t
LEFT JOIN (
SELECT
tg.team_id,
jsonb_build_object(
'id', tg.id
) AS games
FROM tournament_games tg
ORDER BY tg.total_points DESC
LIMIT 4
)AS Games ON Games.team_id = t.id
WHERE t.tournament_id = 40
GROUP BY t.id我的问题是LIMIT 4只会导致3场比赛而不是4场比赛,当我取消限制时,我会在我的数据库中收到所有的6场比赛。
在左联接中应用限制有问题吗?每次我增加极限,它的返回比极限状态少一个。(前。极限5返回4局)
编辑:
当删除限制时,它将返回我数据库中的所有6个条目。如果将限制设置为7(超过总条目),则只返回4个条目。
这是否意味着左侧联接中的查询将返回7,但实际的联接将移除其他连接?
发布于 2020-12-04 21:33:46
我怀疑你想每队打4场比赛。为此,我建议使用子查询或横向连接:
select t.id as teamid, t.name, tg.games
from teams t
left join lateral (
select jsonb_agg(jsonb_build_object('id', tg.id)) as games
from (
select tg.*
from tournament_games tg
where tg.team_id = t.id
order by tg.total_points desc
limit 4
) tg
) tg on true
where t.tournament_id = 40我不知道您为什么要将json对象转换为文本--这似乎没有多大帮助,所以我将其置之不理。
https://stackoverflow.com/questions/65150728
复制相似问题