首页 > 解决方案 > MySQL插入类别行

问题描述

我正在努力描述标题中的问题,更不用说寻找可能存在的解决方案了,所以请原谅,或指出我的线程。我需要填充行,因此每个类别有 4 行,如下面的简化场景所示:

mysql> select * from a;
+-------+
|  Num  |
+-------+
|     1 |
|     2 |
|     3 |
|     4 |
+-------+
mysql> select * from b;
+----------+------+------+
| Category | Num  | Data |
+----------+------+------+
| X        |    2 |   10 |
| X        |    3 |   12 |
| X        |    4 |    8 |
| Y        |    1 |    0 |
| Y        |    2 |   19 |
| y        |    3 |   15 |
| y        |    4 |   22 |
| Z        |    2 |   10 |
+----------+------+------+

我需要的结果总是每个类别有 4 行(表 b 总是每个类别有 Num = 1、2、3 或 4 之一),为填充行设置 data = null:

mysql> select * from c;
+----------+------+------+
| Category | Num  | Data |
+----------+------+------+
| X        |    1 | NULL |
| X        |    2 |   10 |
| X        |    3 |   12 |
| X        |    4 |    8 |
| Y        |    1 |    0 |
| Y        |    2 |   19 |
| y        |    3 |   15 |
| y        |    4 |   22 |
| Z        |    1 | NULL |
| Z        |    2 |   10 |
| Z        |    3 | NULL |
| Z        |    4 | NULL |
+----------+------+------+

我人为地创建了表a ,因为我认为它可能有助于 (INSERT) 查询?!

标签: mysqlsqlselectsql-insert

解决方案


你需要左加入

select a.num, b.category , b.data
from tablea a
left join tableb b on a.num = b.num 

并用于插入

insert into tablec (num, category, data)
select a.num, b.category , b.data
from tablea a
left join tableb b on a.num = b.num 

如果需要更新 exing 行

update tablec c
inner join ( 
select a.num, b.category , ifnull(b.data,0)
from tablea a
left join tableb b on a.num = b.num ) t t.num= c.num  and t.category = c.category
set data  = t.data

推荐阅读