今天在写一个案例的时候,想通过多表查询来实现一个功能,写好了sql语句,执行后出现了You can't specify target table 'book' for update in FROM clause的错误。
错误代码示例:
1 UPDATE book
2 SET amount = amount + (4 SELECT num FROM borrow WHERE uid = (
5 SELECT id FROM USER WHERE NAME = '健健' )
6 AND bid = (
7 SELECT id FROM book WHERE bookname = '平凡的世界'
8 ) 9 )WHERE bookname = '平凡的世界';
You can't specify target table 'book' for update in FROM clause:这句话翻译过来是:不能用同一表中查询的数据作为同一表的更新字段的参数值。
痛过查询资料的知,这是因为mysql本身不支持这种写法,即使我们的逻辑都是对的,所以,只需要做一个小小的修改即可,在查询的时候,我们在更新和查询之间添加一个中间表,避免两张表之间的直接操作即可,下面是我修改之后的代码:
1 UPDATE book
2 SET amount = amount + (
3 SELECT a.num FROM(
4 SELECT num FROM borrow WHERE uid = (
5 SELECT id FROM USER WHERE NAME = '健健' )
6 AND bid = (
7 SELECT id FROM book WHERE bookname = '平凡的世界' ) ) a
8 )WHERE bookname = '平凡的世界';