繁体   English   中英

SQLite:带COUNT子查询的UPDATE语句

[英]SQLite: UPDATE statement with COUNT subquery

UPDATE OPERATING_SYSTEM
SET App_Count = 
    (SELECT COUNT(OPERATE.App_ID) AS App_Count 
     FROM OPERATING_SYSTEM , OPERATE WHERE OPERATING_SYSTEM.Name = OPERATE.Operating_System_Name
     GROUP BY OPERATING_SYSTEM.Name);

此子选择为每个记录返回一个总数 在此处输入图片说明

但是,当您单独运行查询时,它将为每个记录返回正确的计数。

在此处输入图片说明

UPDATE语句的工作方式是为目标表中的每一行评估子查询。 由于您的子查询与更新没有关联,因此将对其进行一次处理,并将结果放置在每一行中。 您所缺少的是相关性。 对于要更新的​​每一行,您要计算该特定名称的计数。 尝试类似:

UPDATE OPERATING_SYSTEM
SET App_Count = 
         (
          SELECT COUNT(O.App_ID) 
          FROM OPERATING_SYSTEM AS OS, OPERATE AS O 
          WHERE OS.Name = O.Operating_System_Name 
                AND OS.Name = OPERATING_SYSTEM.Name
         );

我认为您需要:

UPDATE OPERATING_SYSTEM 
SET App_Count = (
  SELECT COUNT(App_ID) FROM OPERATE WHERE Operating_System_Name = OPERATING_SYSTEM.Name
)

您无需将子查询加入表OPERATING_SYSTEM
OPERATE有您需要的计数

子查询不应包含对OPERATING_SYSTEM的联接:

UPDATE OPERATING_SYSTEM
SET App_Count =
    (SELECT COUNT(OPERATE.App_ID) AS App_Count
     FROM OPERATE
     WHERE OPERATING_SYSTEM.Name = OPERATE.Operating_System_Name
     GROUP BY OPERATE.Operating_System_Name);

dbfiddle在这里

您的UPDATE语句需要WHERE子句。 您正在将所有行更新为子查询返回的值之一(在本例中为18)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM