【发布时间】:2014-01-22 21:51:56
【问题描述】:
...当查看某人墙上或您的新闻提要中的帖子列表时,就像 Facebook 的 cmets 预览一样。
我的数据库当前设置有一个表articles,主键为articleID。
我有另一个表 comments,主键 commentID 和外键 articleID 指向相应的文章。
当我使用该文章的 cmets 检索一篇文章时,这是微不足道的,根本不会给我带来负担。但是,是否可以编写一个查询,将这两个表连接在一起并检索最近 10 篇文章的列表(用于构建预览)并说每篇文章 3 个 cmets(以创建 cmets 预览)?
我无法弄清楚这一点,希望有经验的意见。干杯,谢谢!
我没有回答我自己问题的声誉,所以我将在此处发布答案。感谢到目前为止的两位评论员。
哇,我以为我理解联接的方式令人震惊。事情的简单事实是我没有。我认为以一对多关系连接两个表只能在左表中每行返回一行。回想起来,这显然是错误的,因为会返回哪一行?鉴于当前的两个响应考虑了这个问题,我发现这两篇文章使用了这些 cmets 引导我的想法。因此,感谢您的帮助。
How can a LEFT OUTER JOIN return more records than exist in the left table?
Select first record in a One-to-Many relation using left join
用这样一个新手问题为任何偶然发现这个问题的人彻底回答这个问题......
文章表:
ArticleID----------ArticleName
100 Art 1
200 Art 2
评论表:
CommentID----------ArticleID-------Comments------Date
1 100 test date 1
2 100 test2 date 2
3 100 test3 date 3
4 100 test4 date 4
上面引用的第二篇文章真正解决了我的问题。就我而言,我真的需要这样的东西:
SELECT
TOP 10 articles.*,
comments.*
FROM articles
LEFT
JOIN comments
ON articles.articleID = comments.articleID
AND comments.commentID =
( SELECT TOP 3
commentID
FROM comments
WHERE comments.articleID = articles.articleID
)
;
【问题讨论】:
标签: sql sql-server join foreign-keys