繁体   English   中英

MySQL,从另一个表的每个记录插入表

[英]Mysql, Insert into table from every record from another table

我有2张桌子,像这样:

table_com
-------------
id_com|code|value|
----------------
1     |10  | A
2     |20  | B


table_b
----------
id_b|code
----------
1   |10
2   |20
3   |30

我要插入到table_com存在于每个登记table_b ,但不是在table_com (acording到code ),在该示例将是id_b==3 ,因为该代码= 30它不存在于table_a ,对于的值,我需要输入0。最终的table_com应该像这样:

table_com
-------------
id_com|code|value|
-----------------
1     |10  | A
2     |20  | B
3     |30  | 0

我正在使用php,我尝试了table_b的foreach值并尝试按我所说的插入值,但不确定如何做到这一点(我知道使用INSERT INTO不能使用WHERE,这只是一个例子) :

foreach ($comunas as $key => $value) {
            $code = $value->code;
            DB::select(DB::raw(" 
                INSERT INTO rgl_clientes_comuna (
                    code,
                    value
                ) 
                VALUES
                    ($code, 0,)
                WHERE code IS NOT $code
            "));
        }

编辑:

1)对于第一个答案,我尝试了一下(使用我的真实数据):

INSERT INTO rgl_clientes_comuna (
    comuna_id,
    numero_clientes
) SELECT
    cod_comuna,
    0
FROM
    rgl_cut ON DUPLICATE KEY UPDATE comuna_id = 12201

它有效,但是它为table_b上的每个注册表添加了新行

我只会insert on duplicate key update使用insert on duplicate key update

insert into a (code, value)
    select code, 0
    from b
    on duplicate key update code = values(code);

为此,您需要对a(code)具有唯一的索引/约束。

这个怎么样?

insert into table_com
  select id_b, code, 0
    from table_b where id_b not in (select id_com from table_com);

或这个?

insert into table_com
  select id_b, code, 0
    from table_b where code not in (select code from table_com);

因为我不清楚决定因素是id还是code的存在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM