美文网首页
insert 与 select 联合使用遇到 You can

insert 与 select 联合使用遇到 You can

作者: ProudLin | 来源:发表于2020-03-07 12:53 被阅读0次

    前端要我在测试环境的数据表里增加几条数据,好吧,不就是写 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

    相关文章

      网友评论

          本文标题:insert 与 select 联合使用遇到 You can

          本文链接:https://www.haomeiwen.com/subject/bsgqdhtx.html