MySQL обновление заявления MySQL Workbench

0

У меня возникли проблемы с работой между MySQL Workbench и SSMS, чтобы понять синтаксис обоих

самая большая проблема, с которой я столкнулся, - это инструкция обновления.

Я написал запрос для отображения элементов, которые я хотел изменить до обновления, которое отлично работает, но когда я пытаюсь с ним связать UPDATE, он не хочет работать

выражение о обновлении, которое будет включено, было

UPDATE Book SET Shelf_Location = 'KD-2222'

рассматриваемый запрос

Select * 
FROM Book b0
WHERE b0.Subject_Code IN
(
SELECT b1.Subject_Code FROM Book b1
GROUP BY b1.Subject_Code
HAVING COUNT(*) = 
       (
        SELECT MIN(C.BookCount2) from
            (
            SELECT b2.Subject_Code, COUNT(*) as BookCount2 FROM Book b2
            GROUP BY b2.Subject_Code
            ) 
            as C
        )
 );

Из ресурсов, на которые он смотрел, упоминается использование Select * FROM() и помещение подзапроса в круглую скобку.

Любая помощь приветствуется.

Спасибо

РЕДАКТИРОВАТЬ:

Я нашел недостающую проблему с помощью Гордона Линоффа и некоторые эксперименты

исправленный код:

UPDATE book b JOIN
   (SELECT b1.Subject_Code
    FROM book b1
    GROUP BY b1.Subject_Code
    HAVING COUNT(*) = (
                            SELECT MIN(C.BookCount2) from
                                (
                                SELECT b2.Subject_Code, COUNT(*) as BookCount2 FROM Book b2
                                GROUP BY b2.Subject_Code
                                ) as C
                                )
                                ) 
                                as bs
   ON bs.subject_code = b.subject_code
   SET Shelf_Location = 'KD-2222'; 
  • 2
    Пожалуйста, предоставьте ваш код обновления.
Теги:
mysql-workbench

1 ответ

0

Во-первых, вы можете упростить код:

Select * 
FROM Book b
WHERE b.Subject_Code IN (SELECT b1.Subject_Code
                         FROM Book b1
                         GROUP BY b1.Subject_Code
                         HAVING COUNT(*) = (SELECT COUNT(*) as BookCount2
                                            FROM Book b2
                                            GROUP BY b2.Subject_Code
                                            ORDER BY COUNT(*) DESC
                                            LIMIT 1
                                           )
                        );

MySQL не позволяет ссылаться на обновляемую таблицу в set или where часть update. Instead, use update. Instead, use join ':

UPDATE book b JOIN
       (SELECT b1.Subject_Code
        FROM Book b1
        GROUP BY b1.Subject_Code
        HAVING COUNT(*) = (SELECT COUNT(*) as BookCount2
                           FROM Book b2
                           GROUP BY b2.Subject_Code
                           ORDER BY COUNT(*) DESC
                           LIMIT 1
                          )
       ) bs
       ON bs.subject_code = b.subject_code
    SET . . .;
  • 0
    Из моего запроса выше он возвратил только две строки, но когда я запускаю это обновление, он обновляет 8 строк?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню