gpt4 book ai didi

mysql - JPA通过比较本地列和连接表列的查询顺序?

转载 作者:行者123 更新时间:2023-11-29 11:48:24 24 4
gpt4 key购买 nike

假设我有两个表:TopicPost

Topic@OneToMany Set<Post> posts这意味着一个主题可能有零个或多个回复的帖子。 (并且 Post 有一个 @ManyToOne Topic topic 链接回 Topic )

两者TopicPost有一个created列 ,存储时间戳。

我想得到按照最新回复帖子时间排序的主题列表,如果某个主题没有回复帖子,则会根据主题创建时间来判断

这样的伪 JPQL 可能看起来像:

select t from Topic t left outer join t.posts p 
order by "max(t.created , latest p.created if p exists)" desc
group by t.id

当然不行,因为我不知道如何写出正确的order by此处的条款。

有人可以给我提示吗?谢谢。

====================更新====================

感谢@Utsav SQL 示例。这是有效的 JPQL:

select t 
from Topic t
left outer join t.posts p
group by t.id
order by (case when p.id is null then t.created else max(p.created) end ) desc

我正面临这样的问题:

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column
'DBNAME.p.id' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by

这似乎与 OS/X 10.11 (Yosemite) 的 MySQL 5.7.x+ 不兼容。我的工作解决方案在这里Getting this SQL Error: GROUP BY incompatible with sql_mode=only_full_group_by

修改后my.cnf然后重启MySQL,就可以了。

最佳答案

编辑:按逻辑添加组。

我假设 posts 表有一个 tid 列,该列引用 topic.id

select t.id,
case when p.id is null
then t.created
else max(p.created)
end
as derived_max_time
From topic t
left join posts p
on t.id=p.tid
group by t.id
order by derived_max_time desc

请参阅此处更新的 MYSQL fiddle 演示

http://sqlfiddle.com/#!9/abbfb/8

关于mysql - JPA通过比较本地列和连接表列的查询顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com