vottot 2010-08-03 21:12
浏览 168
已采纳

关于数据库关系查询的一个重要问题求解

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

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次查询,肯定不合理,不知道是否有其它的查询方式,希望大家帮忙,或者有什么其它的设计。

  • 写回答

2条回答 默认 最新

  • piaolai 2010-08-04 00:09
    关注

    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的为收藏过的

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

报告相同问题?

悬赏问题

  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺