Mysql 如果存在,则更新表,否则插入

Mysql 如果存在,则更新表,否则插入,mysql,sql,Mysql,Sql,我有一张名为a的桌子 userindex bts userid accountnumber isalepo 119459 190900 a@qubee.com.bd 000000000000004 0 31513 1a1430 b@qubee.com.bd 000000000000008 0 36981 196100 c@qubee.com.bd 000000000000018 0 56215 197200 d@qubee.com.bd 0

我有一张名为a的桌子

userindex bts   userid          accountnumber   isalepo
119459  190900  a@qubee.com.bd  000000000000004 0
31513   1a1430  b@qubee.com.bd  000000000000008 0
36981   196100  c@qubee.com.bd  000000000000018 0
56215   197200  d@qubee.com.bd  000000000000062 1
145938  199000  e@qubee.com.bd  000000000000066 0
57410   1a1520  f@qubee.com.bd  000000000000067 1
38554   198510  g@qubee.com.bd  000000000000068 0
15595   1a2d10  h@qubee.com.bd  000000000000069 0
30945   1a1120  i@qubee.com.bd  000000000000074 0
156180  190320  j@qubee.com.bd  000000000000081 0
如果表b中存在bts字段,我只想更新它

userindex   bts usage_in_mb
100024  081620  4761.23809814
100044  001320  499.27043915
36981   19f710  1114.07279968
100061  19fb10  10931.33640284
57410   07dc10  108.45470429
100088  164610  1474.35951231
10009   19b700  2920.20797732
100105  19c200  7607.14340212
100110  000610  5771.08287813
156180  194820  1409.85393525
若表a中不存在userindex,那个么我想从b和c表中插入(userindex、bts、userid、accountnumber、isalepo)。表c包含

userindex   accountnumber   userid
100024  000000000094190 aa@qubee.com.bd
100044  000000000000018 bb@qubee.com.bd
36981   000000000000067 cc@qubee.com.bd
100061  000000000214989 dd@qubee.com.bd
57410   000000000187084 ee@qubee.com.bd
100088  000000000236716 ff@qubee.com.bd
10009   000000000211229 gg@qubee.com.bd
100105  000000000236222 hh@qubee.com.bd
100110  000000000237036 ii@qubee.com.bd
156180  000000000000081 jj@qubee.com.bd
我正在尝试这个问题

INSERT INTO a
  (
   userindex
  ,bts
  ,userid
  ,accountnumber
  ,isalepo
  ,crestelbts
)
SELECT b.userindex
,b.bts
,c.USERID
,c.accountnumber
,1
,0
FROM b  
left join  c on b.userindex=c.userindex
ON DUPLICATE KEY UPDATE
bts = VALUES(b.bts);

如果指定“在重复密钥更新时”,并插入一行,则 将导致MySQL的唯一索引或主键中出现重复值 执行旧行的更新。例如,如果列a为 声明为唯一并包含值1,以下两个 声明具有类似的效果:

这种行为是因为您没有唯一或主键。所以你需要

ALTER TABLE a ALter table fts add primary key(userindex) 

从MySQL的, 您可以尝试以下方法:

INSERT INTO a (userindex,bts,userid,accountnumber,isalepo,crestelbts) 
 SELECT b.userindex ,b.bts ,c.USERID ,c.accountnumber ,1 ,0
FROM b left join  c on b.userindex=c.userindex
WHERE NOT EXISTS ((SELECT * FROM b WHERE b.userindex = a.userindex) OR (
   SELECT * FROM c WHERE c.userindex = a.userindex ));

您的查询中存在什么问题?您通过此查询得到了什么错误或其他信息?它将所有数据附加到userindex相同的地方@Chonchol MahmudMySQL或Oracle?请编辑标签。这是MySQL的。我编辑标记您想在一次查询中完成吗?我还想从表'b'@Amranur Rahman更新表'a'中的bts
INSERT INTO a (userindex,bts,userid,accountnumber,isalepo,crestelbts) 
 SELECT b.userindex ,b.bts ,c.USERID ,c.accountnumber ,1 ,0
FROM b left join  c on b.userindex=c.userindex
WHERE NOT EXISTS ((SELECT * FROM b WHERE b.userindex = a.userindex) OR (
   SELECT * FROM c WHERE c.userindex = a.userindex ));