Вопрос:

SQLITE: ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ С COUNT SUBQUERY

mysql sql sqlite

20 просмотра

4 ответа

1 Репутация автора

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);

Этот суб-выбор возвращает общее количество для каждой записи введите описание изображения здесь

Но когда вы запускаете запрос один, он возвращает правильное количество для каждой записи.

введите описание изображения здесь

Автор: Φωτεινή Βασίλειος Σπυρόπουλος Источник Размещён: 26.02.2019 10:57

Ответы (4)


0 плюса

447 Репутация автора

Ваше UPDATEзаявление нуждается в WHEREоговорке. Вы обновляете все строки до одного из значений, возвращаемых подзапросом (в данном случае 18).

Автор: Richard Размещён: 26.02.2019 11:07

0 плюса

213 Репутация автора

Операторы 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
         );
Автор: SQLRaptor Размещён: 26.02.2019 11:10

0 плюса

14318 Репутация автора

Я думаю, что вам нужно:

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

Вам не нужно присоединять подзапрос к таблице OPERATING_SYSTEM.
Количество, которое вам нужно, есть в таблицеOPERATE

Автор: forpas Размещён: 26.02.2019 11:11

0 плюса

34306 Репутация автора

Подзапрос не должен содержать соединение с 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);

здесь

Автор: Bob Jarvis Размещён: 26.02.2019 11:23
Вопросы из категории :
32x32