【发布时间】:2021-03-16 22:18:41
【问题描述】:
我目前正在我的 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 个游戏。
在左连接中应用限制是否有问题?每次我增加限制时,它都会比限制状态少一个。 (EX. 限制 5 返回 4 场比赛)
编辑:
删除限制时,它会返回我数据库中的所有 6 个条目。如果将限制设置为 7(超过总条目),则仅返回 4 个条目。
这是否意味着 LEFT JOIN 中的查询返回 7 但实际的 JOIN 正在删除其他查询?
【问题讨论】:
-
哪些输入会导致具有这些属性的输出?考虑到 SQL 的定义方式,为什么这个查询会返回您所期望的结果?如果你不告诉我们,你只是在要求我们写另一本关于 SQL 的书,并期望我们在不展示你的推理的情况下解决你的误解。此外,您知道您的期望是错误的,因此您应该在考虑询问之前将它们与文档进行比较。此外,您通常不会完全说出您希望查询作为输入函数返回的内容,您只需提供不执行此操作的代码。 How to Askhelp centerPS minimal reproducible example
标签: sql json postgresql left-join lateral-join