MySQL更新语句MySQL工作台
在MySQL Workbench和SSMS之间工作时,我很难理解两者的语法 我遇到的最大问题是update语句 我已经编写了一个查询来显示我希望在更新之前更改的项目,这非常有效,但是当我尝试将更新与之配对时,它不想工作 将要包含的update语句是MySQL更新语句MySQL工作台,mysql,mysql-workbench,Mysql,Mysql Workbench,在MySQL Workbench和SSMS之间工作时,我很难理解两者的语法 我遇到的最大问题是update语句 我已经编写了一个查询来显示我希望在更新之前更改的项目,这非常有效,但是当我尝试将更新与之配对时,它不想工作 将要包含的update语句是 更新手册 设置货架位置='KD-2222' 问题是 Select * FROM Book b0 WHERE b0.Subject_Code IN ( SELECT b1.Subject_Code FROM Book b1 GROUP BY b1.S
更新手册
设置货架位置='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()并将子查询放在From的括号中
感谢您的帮助
谢谢
编辑:
在Gordon Linoff和一些实验的帮助下,我找到了缺失的问题
更正后的代码为:
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不允许您在更新的集合
或其中
部分引用正在更新的表。相反,请使用
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 . . .;
请提供您的更新代码。从我上面的查询中,它只返回了两行,但当我运行此更新时,它更新了8行?