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

更新查询“可更新查询”问题

  •  0
  • Dan  · 技术社区  · 15 年前

    在Access2003中,我试图取一个表,如果给定ID的任何一行的任何指示符都为1,则使该ID的所有行都为1。

    例如,如果我们有:

    ID   Indicator
    Jack 0 
    Jack 0
    Jeff 1
    Jeff 0
    Mark 1
    Mark 1
    

    将成为:

    ID   Indicator
    Jack 0 
    Jack 0
    Jeff 1
    Jeff 1
    Mark 1
    Mark 1
    

    因为Jeff和Mark都至少有一行,其中indicator=1,所以我想使它们的所有行都为1。

    到目前为止,这是我的尝试,但我一直收到一个错误:“操作必须使用可更新的查询”(我认为因为select语句不是表…无法更新查询)

    UPDATE Table1 INNER JOIN (SELECT DISTINCT Table1.ID
    FROM Table1
    WHERE (((Table1.Indicator)=1)))
    List ON Table1.ID =List.ID SET Table1.Indicator = 1;
    

    什么是快速有效地做到这一点的好方法? 不做临时桌 ?还是临时桌是最好/最有效的解决方案?这会使我的数据库混乱很多,因为有8行我必须在上面做这个…我要找的那张桌子大约300兆。

    谢谢

    3 回复  |  直到 15 年前
        1
  •  3
  •   Mark Byers    15 年前

    这是一种方法:

    UPDATE T1 SET Indicator = 1 
    WHERE Indicator = 0
    AND EXISTS (SELECT * FROM T1 AS T2 WHERE T2.Indicator = 1 AND T1.ID = T2.ID)
    
        2
  •  1
  •   OMG Ponies    15 年前

    最简单的解决方案:

    UPDATE TABLE 
       SET indicator = 1
     WHERE id IN ('Jeff', 'Mark') --etc
    

    如果只想更新值不是1的行:

    UPDATE TABLE 
       SET indicator = 1
     WHERE id IN ('Jeff', 'Mark')
       AND indicator != 1
    
        3
  •  1
  •   Adriaan Stander    15 年前

    你试过这样的吗

    UPDATE [Table] SET [Table].[Indicator] = 1, [Table].ID = [ID]
    WHERE Exists (SELECT * FROM [Table] t WHERE ID = t.ID and [Table].Indicator = 1);