[英]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.