使用实体ID填充指定行的MySQL查询?

时间:2012-01-26 11:33:03

标签: mysql sql

我的MySQL数据库中有两个表:

DisplayArticles

Id
CategoryId
ArticleId
IsAuto

文章

Id
CategoryId
Title

现在我需要做的是编写MySQL查询,将查询IsAuto设置为true的所有位置,使用指定类别的最新文章(最新的文章位于顶部位置)。

例如,如果我有文章:

...

53 2 'Article that is older'
54 2 'Article about something funny'
55 6 'Article about something else'
56 2 'Article about something interesting'

我的显示文章如下:

1  2  12 false
2  2  42 true
3  2  41 true
4  2  23 false
5  2  25 false

使用参数CategoryId = 2调用的查询应修改DisplayArticles表,如下所示:

1  2  12 false
2  2  56 true
3  2  54 true
4  2  23 false
5  2  25 false

希望这是清楚易懂的。 请帮我写这个查询。

感谢您的回复。

1 个答案:

答案 0 :(得分:3)

以下应该这样做。

它的要点就是这样

  • 使用CategoryID
  • 上的子选择匹配
  • 从此子选项中选择ArticleID中的最新Articles,不包括已分配的ArticleID
  • 添加WHERE条款,仅更新IsAuto等于true的位置。

更新声明

UPDATE DisplayArticles
SET    ArticleID = (SELECT MAX(ArticleID) 
                    FROM   Articles AS a                        
                    WHERE  a.CategoryID = CategoryID
                           AND ArticleID NOT IN (
                             SELECT ArticleID 
                             FROM   DisplayArticles da
                             WHERE  da.CategoryID = CategoryID 
                           )
                   )
WHERE  IsAuto = 'true'