vottot 2010-08-04 18:32
浏览 367
已采纳

HSQL查询求解

昨天开贴,问题得到解决。

http://www.iteye.com/problems/47320

写道
系统有个收藏的功能,数据库是这样设计的:

Article (文章表)

ID

Title

Content



Favorite(收藏表)

ID

ArticleID

UserID



User(用户表)

ID

Name



如果有用户收藏文章的话,就向Favorite添加一条数据,如果没有的话就不做任何操作。三个表之间没建立任何关系。



假如现在需要查询用户ID为1收藏的所有内容:

可以这样:select * from Article where ID in(Select ArticleID from Favorite where UserID=1)



现在有个查询需求:

有个页面会把所有的内容都列出来,也就是:select * from Article .

查询出来的内容需要判断用户是否收藏并且做出相应的表示。



我可以直接用:select * from Article ,然后分别对每条结果再查询用户是否收藏过,这样查询就造成了N+1次查询,肯定不合理,不知道是否有其它的查询方式,希望大家帮忙,或者有什么其它的设计。

 最终答案:

写道
select a.ID, a.Title, a.Content, b.ID from Article a left join Favorite b on (a.ID=b.ArticleID and b.UserID=1)
b.ID类为null的则为没有收藏过的,非null的为收藏过的

 

 因为用hibernate,今天在制作的时候才发现hibernate不支持left join  on ,而且我的几个表都没有建立关系,现在就比较麻烦了,怎么把这个sql转换为hsql查询?

 

  • 写回答

3条回答 默认 最新

  • piaolai 2010-08-05 10:29
    关注

    如果是用hibernate的话,配置left join on确实比较麻烦;
    你可以考虑用两个语句来做,一个是找出该用户收藏的文章
    [code="SQL"]select * from Article where ID in(Select ArticleID from Favorite where UserID=1) [/code]
    一个是找出该用户没有收藏的文章
    [code="SQL"]select * from Article where ID not in(Select ArticleID from Favorite where UserID=1) [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效