mysql更新内部连接表中的行

时间:2015-07-16 14:17:01

标签: c# mysql database

我试图通过c#在mysql服务器上批量更新大量的行。

我知道可以使用语法

批量替换
INSERT INTO table.items(`id`, `asset_id`, `bot_steam64`)
VALUES(...),
      (...),
      (...),
ON DUPLICATE KEY UPDATE asset_id=...

我想在我的一部分表

上执行此操作
  1. 与我拥有的另一个表
  2. 共享一个字段值
  3. 匹配另一个表中的特定字段值(这听起来像一个连接)
  4. 我不知道如何表达我所描述的复合逻辑,或者是否还有其他方法可以解决这个问题

    items:
    asset_id bigint(32) UN 
    trade_id bigint(32) UN 
    value int(11) 
    name tinytext 
    bot_steam64 bigint(20) 
    winner tinyint(4) 
    id bigint(32) UN PK
    
    bets:
    trade_id bigint(32) UN 
    user_steam64 bigint(20) UN PK 
    match_id bigint(32) UN PK 
    total_value bigint(32) UN 
    chosen_team tinyint(3) UN
    

    具体而言,items.trade_id=bets.trade_idmatch_id=1234

2 个答案:

答案 0 :(得分:0)

create table t1
(
    i int not null,
    some_other_thing int not null
);

create table t2
(   i int not null,
    updateMe int not null,
    some_other_thing int not null
);

insert into  t1(i,some_other_thing) values (1,1),(2,7);
insert into  t2(i,updateMe,some_other_thing) values (1,0,0),(2,0,4);

update t2
join t1
on t2.i=t1.i and t2.some_other_thing=4
set t2.updateMe=9;

-- 1 row changed

select * from t2
如果您需要在连接中使用t1.some_other_thing,那么

根据需要进行调整。

我没有做insert on duplicate update的原因是因为你说你想在开始时做更新。而你说部分表......

答案 1 :(得分:0)

也许你想要这样的东西:

INSERT INTO table.items(`id`, `asset_id`, `bot_steam64`)
    SELECT t.*
    FROM (SELECT ... UNION ALL
          SELECT ... UNIONALL
          . . .
         ) t
    WHERE t.col IN (SELECT a.anothercol FROM anothertable a)
    ON DUPLICATE KEY UPDATE asset_id = ...;