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 ');