---
id: "2019-01-25-09-48"
date: "2019/01/25 09:48"
title: "mysql使用查询结果进行插入操作"
tags: ["mysql","select","insert"]
categories: 
- "数据库"
- "分布式事务"
---


&emsp;&emsp;经常在使用 mysql 的过程中想要从一张表中查出一些数据插入到另一张表中，操作如下。

# 1、方法

&emsp;&emsp;使用 insert ... select ...操作。要求两边参数个数，参数类型完全一致，所以如果不一致就需要进行一些转换操作来让它一致。例子如下：

&emsp;&emsp;从表 B 中查数据插入到表 A 中。

1. A 表字段多，B 表字段少

```javascript
//A表结构
A:{
    a:int,
    b:int,
    c:int
}
//B表结构
B:{
    a:int,
    b:int
}
```

sql 语句如下：

```sql
insert into A(a,b,c) select b.*,1 from B b;
```

&emsp;&emsp;由于 B 表比 A 表少了一个 int 型参数 c，所以在 select 语句中加上一个数值补齐。

<!-- more -->

2. A 表字段少，B 表字段多

```javascript
A:{
    a:int,
    b:int
}
B:{
    a:int,
    b:int,
    c:int
}
```

sql 语句如下：

```sql
insert into A(a,b) select a,b from B
```

&emsp;&emsp;A 表只有两个 int 参数，所以只能从 B 中 select 两个参数，不一定是 a,b。也可以是 a,c 只要参数类型，个数一致就行。

3. A，B 表字段一致，但是类型不一致

```javascript
//A表结构
A:{
    a:int,
    b:int
}
//B表结构
B:{
    a:string,
    b:int
}
```

sql 语句如下：

```sql
insert into A(a,b) select (cast a as SIGNED),b from B
```

&emsp;&emsp;使用类型转换将参数类型转换为一致即可。
