insert 与 select 联合使用遇到 You can

2020-03-07  本文已影响0人  ProudLin

前端要我在测试环境的数据表里增加几条数据,好吧,不就是写 SQL 语句咩。

不过基于上次出现的问题,因为生产环境与测试环境的数据的增长 ID 还是有不同的,

注:主和子数据的 code 有某种关联

比如一条子数据的 parent_id 要关联某个主数据的自动增长 id,而 666 是主数据的 ID ,最简单粗暴的方法就是提前知道主数据的 id ,但感觉不是很睿智。

INSERT INTO `tableA`
( `name`, `code`, `type`, `parent_id`, `url`) 
VALUES 
('测试', 'Q-Z', 0,666, '/xxx/fff ');

于是我写了一条动态获取 parent_id 的语句。

1)用这条简单的 SQL 语句我可以知道它的 ID

select id from tableA where code ='Q'

于是我猜想这样应该可以吧?

2)

INSERT INTO tableA  ( `name`, `code`, `type`, `parent_id`, `url`)
 VALUES 
('测试', 'Q-Z', 0, (select id from tableA  where code ='Q') , '/xxx/fff ');

不行,报了错误

You can't specify target table 'basic_data' for update in FROM clause

翻译:不能在 FROM 子句中指定用于更新的目标表 "basic_data"

大概意思就是 mysql 把查询子句当做一个临时表,不在当做一个实体表

3)修改后

INSERT INTO tableA  ( `name`, `code`, `type`, `parent_id`, `url`)
 VALUES 
('测试', 'Q-Z', 0, (select id from  (select * from tableA  ) as s  where code ='Q') , '/xxx/fff ');

参考文献:
[1]https://blog.csdn.net/winter13292/article/details/8628953?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

上一篇下一篇

猜你喜欢

热点阅读