在SQL表中整理dublettes
我在下面给出了我真正问题的一个解释: 设想一个网站显示文章,所有文章都有与之相关的评论。现在我想得到那些评论超过某个日期的文章,比如说2011-02-02。我还想得到最接近2011-02-02的评论。不要忘记,每篇文章都有不止一条与之相关的评论。我希望这在一个SQL查询中发生 我发现很难解释我的问题,所以我给出了SQL代码:在SQL表中整理dublettes,sql,mysql,Sql,Mysql,我在下面给出了我真正问题的一个解释: 设想一个网站显示文章,所有文章都有与之相关的评论。现在我想得到那些评论超过某个日期的文章,比如说2011-02-02。我还想得到最接近2011-02-02的评论。不要忘记,每篇文章都有不止一条与之相关的评论。我希望这在一个SQL查询中发生 我发现很难解释我的问题,所以我给出了SQL代码: SELECT articles.*, comments.date AS date FROM articles, comments WHERE comments.commen
SELECT articles.*, comments.date AS date
FROM articles, comments
WHERE comments.commentId in (SELECT commentId
FROM comments
WHERE date > 2011-02-02
ORDER BY date asc
LIMIT 1)
ORDER BY comments.date desc
问题在于SQL查询的成员部分。因为它只返回一行。我希望每篇文章都能出现这种情况您只需查询大于日期的评论,返回文章ID您确实有一个标准化的结构,对吗?没有任何细节很难说
要查找与日期最接近的注释,请按注释日期按升序排序数据,然后取第一个。您只需查询大于日期的注释,返回文章ID您确实有一个标准化的结构,对吗?没有任何细节很难说
select top 1 a.* from articles a
inner join comments c on c.articleid = a.id
where c.date > '2011-02-02'
order by c.date asc
若要查找最接近日期的注释,请按注释日期按升序排序数据,然后取第一个
select top 1 a.* from articles a
inner join comments c on c.articleid = a.id
where c.date > '2011-02-02'
order by c.date asc
虽然我对MySQL不是非常熟悉,但这应该可以做到
虽然我对MySQL不太熟悉,但应该可以做到这一点。使用子查询。不幸的是,你们的问题并没有给我太多关于模式的信息……所以我会边做边发明。假设您有一个表“Article”,其中Article_id作为主键,而您的另一个表是Article_id上的comments链接。我假设Article_id+date使注释唯一
Select article.article_id, comment.comment_text,comment.comment_date from article
inner join (select min(comment_date) 'comment_date', article_id
from comment
where comment_date < '2010-02-02'
group by article_id) c
on c.article_id = article.article_id
inner join comment on comment.article_id = c.article_id and c.comment_date = comment.comment_date
可以将子查询用作联接中的表。使用子查询隔离所需的单个注释,然后连接回注释表以获取注释文本。希望这是有道理的。我没有MYSQL数据库来测试这一点,但我认为语法应该至少在MSSQL上起作用
编辑格式。您可以在此查询底部包含where语句,以筛选您想要查看的文章。使用子查询。不幸的是,你们的问题并没有给我太多关于模式的信息……所以我会边做边发明。假设您有一个表“Article”,其中Article_id作为主键,而您的另一个表是Article_id上的comments链接。我假设Article_id+date使注释唯一
Select article.article_id, comment.comment_text,comment.comment_date from article
inner join (select min(comment_date) 'comment_date', article_id
from comment
where comment_date < '2010-02-02'
group by article_id) c
on c.article_id = article.article_id
inner join comment on comment.article_id = c.article_id and c.comment_date = comment.comment_date
可以将子查询用作联接中的表。使用子查询隔离所需的单个注释,然后连接回注释表以获取注释文本。希望这是有道理的。我没有MYSQL数据库来测试这一点,但我认为语法应该至少在MSSQL上起作用
编辑格式。您可以在此查询的底部包含where语句,以筛选您想要查看的文章。您是指评论日期大于某个日期的文章吗?您的数据是如何结构化的?如果你有,比如说文章id、评论id和评论日期的列,其中评论id与文章id关联,并且每个评论id都有一个唯一的评论日期,你可以简单地从[任何一个或多个表…可能必须进行连接]中选择文章id,其中评论日期>='20110202'。我想我的问题问错了。看看新的,你是指那些评论日期大于某个日期的文章吗?您的数据是如何结构化的?如果你有,比如说文章id、评论id和评论日期的列,其中评论id与文章id关联,并且每个评论id都有一个唯一的评论日期,你可以简单地从[任何一个或多个表…可能必须进行连接]中选择文章id,其中评论日期>='20110202'。我想我的问题问错了。看看这个新的,很难解释我的问题,所以我举了一个SQL代码的例子。我想你误解了我的意思,因为很难解释我的问题,所以我举了一个SQL代码的例子。我想你误解了我的意思,如果这很容易,我没有问,但是的,它是正常的。很难解释我的问题,所以我给出了一个SQL代码示例。我想你误解了我的意思,如果这很容易,我没有问,但是的,它是正常的。很难解释我的问题,所以我给出了一个SQL代码示例。我想你误解我了