mysql - 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) 查询?!
解决方案
你需要左加入
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
推荐阅读
- javascript - 更新 angular-devkit 并失败:Microsoft.AspNetCore.SpaServices[0]
- json - Javascript Base64 解码到无效的 JSON 输出
- c# - 扩展 IEnumerable 的 Select 以将源包含在选择器中
- php - 爆炸函数在数组的第 0 个索引处返回空值
- python - 尽管已安装模块,但 jupyter 笔记本中未定义 skimage
- node.js - server.use(express.static(path.join(__dirname, 'public'))); 不工作
- javascript - React - 列表中的每个孩子都应该有一个唯一的“关键”道具
- joomla - 类别上的 Joomla 斜杠
- c# - 如何检查字符串是否不等于多个字符串
- docker - k8s 集群中的两个 coredns Pod 处于挂起状态