Mysql 如果存在,则更新表,否则插入
我有一张名为a的桌子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
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 ));