У меня возникли проблемы с работой между 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';
Во-первых, вы можете упростить код:
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 . . .;