Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-在表之间插入或更新行_Mysql - Fatal编程技术网

MySQL-在表之间插入或更新行

MySQL-在表之间插入或更新行,mysql,Mysql,表a: 身份证件 邮寄, 团队 [其他栏目] 表B: 身份证件 邮寄, 团队 [其他栏目] ID是两个表中的主键。我需要完成表B中的每一行,并且: 如果表A中不存在ID,请使用列插入新行 ID、邮件、团队(仅限) 如果表A中确实存在ID,则使用mail的新值更新行(仅限) 表A中存在但表B行中不存在的ID应 不变 我有: INSERT INTO tablea (id,mail,team) (SELECT id,mail,team FROM tableb) ON DUPLICATE KEY upd

表a: 身份证件 邮寄, 团队 [其他栏目]

表B: 身份证件 邮寄, 团队 [其他栏目]

ID是两个表中的主键。我需要完成表B中的每一行,并且:

  • 如果表A中不存在ID,请使用列插入新行 ID、邮件、团队(仅限)
  • 如果表A中确实存在ID,则使用mail的新值更新行(仅限)
  • 表A中存在但表B行中不存在的ID应 不变
  • 我有:

    INSERT INTO tablea (id,mail,team) (SELECT id,mail,team FROM tableb)
    ON DUPLICATE KEY update tablea SET tablea.mail=tableb.mail;
    
    这不起作用-我想我需要一个连接来确保最后一个SET命令有效,但不确定这一部分,有人能帮忙吗

    非常感谢

    如下所述:

    您可以使用子句中的函数引用语句部分的列值。换句话说,在重复键更新时的
    中,子句指的是在没有发生重复键冲突的情况下插入的
    列名称的值。此函数在多行插入中特别有用

    因此:

    INSERT INTO tablea (id, mail, team)
    SELECT id, mail, team FROM tableb
    ON DUPLICATE KEY UPDATE mail = VALUES(mail)
    

    一旦语法正确,如图所示,如果仍然不起作用,请检查以确保您在id、mail、team for tablea上有唯一的索引-否则,“在重复键上”部分将永远不会被触发。