簡體   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