MySQL更新语句MySQL工作台

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

在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.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行?