Mysql基于两个表插入和更新多个字段

Mysql基于两个表插入和更新多个字段,mysql,insert,Mysql,Insert,当主键ID不匹配时,我尝试将字段插入表中。。。如果存在匹配项,则更新字段,以免覆盖行 我目前的尝试是: INSERT INTO dataouts.all_diagnoses (Study_ID, ol1, ol2, ol3, ol4, ol5, ol6, ol7, ol8, ol9, ol10) SELECT Study_ID, Provisional_Diagnosis_1, Provisional_Diagnosis_2, Provisional_Diagnosis_3,

当主键ID不匹配时,我尝试将字段插入表中。。。如果存在匹配项,则更新字段,以免覆盖行

我目前的尝试是:


INSERT INTO dataouts.all_diagnoses  (Study_ID, ol1, ol2, ol3, ol4, ol5, ol6, ol7, ol8, ol9, ol10) 
SELECT Study_ID, Provisional_Diagnosis_1, Provisional_Diagnosis_2, Provisional_Diagnosis_3,
          Provisional_Diagnosis_4, Provisional_Diagnosis_5, Provisional_Diagnosis_6,
          Provisional_Diagnosis_7, Provisional_Diagnosis_8, Provisional_Diagnosis_9,
          Provisional_Diagnosis_10
  FROM SurveyGizmo.SurveyExportAll
  ON DUPLICATE KEY UPDATE values (ol1, ol2, ol3, ol4, ol5, ol6, ol7, ol8, ol9, ol10)
  SELECT Study_ID, Provisional_Diagnosis_1, Provisional_Diagnosis_2, Provisional_Diagnosis_3,
          Provisional_Diagnosis_4, Provisional_Diagnosis_5, Provisional_Diagnosis_6,
          Provisional_Diagnosis_7, Provisional_Diagnosis_8, Provisional_Diagnosis_9,
          Provisional_Diagnosis_10
  FROM SurveyGizmo.SurveyExportAll;
我知道这是不对的,但我想知道是否有人能告诉我如何解决这个问题,因为它已经让我头疼了一段时间了

提前谢谢

再加上一点毅力。。。我认为这是可行的:


insert into dataouts.all_diagnoses(Study_ID, ol1, ol2, ol3, ol4, ol5, ol6, ol7, ol8, ol9, ol10)
    select t1.Study_ID, Provisional_Diagnosis_1, Provisional_Diagnosis_2, Provisional_Diagnosis_3,
          Provisional_Diagnosis_4, Provisional_Diagnosis_5, Provisional_Diagnosis_6,
          Provisional_Diagnosis_7, Provisional_Diagnosis_8, Provisional_Diagnosis_9,
          Provisional_Diagnosis_10
    from SurveyGizmo.SurveyExportAll t1 left outer join
         dataouts.all_diagnoses t2
         on t2.Study_ID = t1.Study_ID
     on duplicate key update ol1 = t1.Provisional_Diagnosis_1,
                             ol2 = t1.Provisional_Diagnosis_2,
                             ol3 = t1.Provisional_Diagnosis_3,
                             ol4 = t1.Provisional_Diagnosis_4,
                             ol5 = t1.Provisional_Diagnosis_5,
                             ol6 = t1.Provisional_Diagnosis_6,
                             ol7 = t1.Provisional_Diagnosis_7,
                             ol8 = t1.Provisional_Diagnosis_8,
                             ol9 = t1.Provisional_Diagnosis_9,
                             ol10 = t1.Provisional_Diagnosis_10
                             ;

到目前为止似乎有效。。感谢大家的支持。

ODKU只处理一行,而不是行集。因此,它不能包含SELECT查询,它必须由许多集合运算符组成,这些运算符将值分配给行的各个列,从而导致重复的冲突。从另一方面来说,您可以用新值替换旧记录的所有字段值,而不是插入。。ODKU可能更安全谢谢Akina。。。我想我的返工现在可以工作了,而不用做很多更新/设置操作符。我不能使用replace,因为我显然不想删除链接到主键的行中已有的任何信息。