代码之家  ›  专栏  ›  技术社区  ›  Chris

MySQL更新-选择性更新

  •  0
  • Chris  · 技术社区  · 14 年前

    首先,为这个糟糕的标题道歉我想不出更好的方式来表达我的观点。(请随意推荐更好的altnernatives)

    基本上我有一个带有“count”列的表。 我想将所有计数重置为零,除了10行的最大值。我希望它们被重置为0。

    如何在不编写多个查询的情况下实现这一点?

    更新 我的问题如下

    UPDATE covers AS t1 
      LEFT JOIN (SELECT t.cover_id 
                   FROM covers t 
                   ORDER BY t.cover_views DESC 
                   LIMIT 10) AS t2 ON t2.id = t.id
       SET cover_views = 0
       WHERE t2.id IS NULL
    

    我得到了错误 #1054 - Unknown column 't2.id' in 'where clause' -知道为什么吗?

    我也尝试了以下同样的结果

    UPDATE covers t1 
      LEFT JOIN (SELECT t.cover_id 
                   FROM covers t 
                   ORDER BY t.cover_views DESC 
                   LIMIT 10) t2 ON t2.id = t.id
       SET t1.cover_views = 0
       WHERE t2.id IS NULL
    
    3 回复  |  直到 12 年前
        1
  •  1
  •   Jon Black    14 年前

    update <table> t 
    left outer join 
    (
    select id from <table> order by <counter> desc limit 10
    ) c on c.id = t.id 
    set 
     <counter> = 0
    where 
     c.id is null;
    
        2
  •  2
  •   OMG Ponies    14 年前

    用途:

    UPDATE TABLE t1 
      LEFT JOIN (SELECT t.id 
                   FROM TABLE t 
               ORDER BY t.id DESC 
                  LIMIT 10) t2 ON t2.id = t1.id
       SET TABLE.count = 0
     WHERE t2.id IS NULL
    
        3
  •  0
  •   Wadih M.    14 年前

    update A set count = 0 where A.id not in 
    (select id from A order by count desc limit 10)