使用INSERT…SELECT语法插入记录(三十二)
前面,我们在谈INSERT语句时,使用两种语句:INSERT…SELECT 和 INSERT…VALUES。
INSERT…SELECT可以使用子查询。因为在写SELECT时。 *** = ***,这就是子查询。
我们还以tdb_goods这张表为例,这张表目前一共有22条数据,但是这22条数据中有很多重复的信息,下面我们简单来查看一下。

select * from tdb_goods\G;

比如这21、22条记录,他们的商品类别都是笔记本配件,他们的品牌都是索尼。这些都是重复的信息,我们都知道汉字占的字节数肯定要比数字要多,如果这种记录越来越多,那么你的数据表就越来越庞大,那么查找的时候速度就会越来越慢,那最好的办法就是使用外键来实现,如果使用外键,那么至少要有两张数据表,所以我们需要再做一张数据表来存储我们的产品分类和品牌。
下面我们就来创建商品的分类表,操作命令及结果如下:

CREATE TABLE IF NOT EXISTS tdb_goods_cates(
cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREENT,
cate_name VARCHAR(40) NOT NULL
);
OK,我们的数据表创建成功。
那么我们该如何插入数据呢,难道我们要一条一条去查找吗,当然不用,一定会有其他的方法,我们可以对查找的分类进行分组来实现,下面我们来看一看我们该怎么写?操作命令及结果如下:

SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
我们发现一共分了这么几类,那么下面我们就要把这几类写到我们刚创建的那张数据表中。理论上有两种方法,一种我们可以用INSERT语句逐条的去插入。这种比较麻烦,那么有没有更简单的方法吗,当然有,我们可以使用之前我们提到过的INSERT…SELECT语句来实现,意思就是将查询的结果写入到我们指定的数据表中。
下面我们就来尝试一下这种方法,操作命令及结果如下:

INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
我们发现记录插入成功,但是这里面还有一个问题,记录现在我们已经插入成功了,但是我们根本就没有使用过外键来实现。
我们来查看一下,我们输入SELECT * FROM tdb_goods\G;结果如下:

我们发现在这张表中仍然存储的是笔记本配件这些商品类别,而应该存储的是商品类别名所对应的那个数字编号,所以我们现在就需要根据我们的分类表去更新我们的商品表,就是参照tdb_goods_cates去更新tdb_goods这张表。以前我们学的是单表更新,那么现在我们要参照一个表去更新另一个表,那么这里就涉及到多表更新。
使用INSERT…SELECT语法插入记录(三十二)的更多相关文章
- “全栈2019”Java第三十二章:增强for循环Foreach语法
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)
1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助. 2.select 下拉框 2.1Select ...
- FreeSql (三十二)Aop
FreeSql AOP 已有的功能介绍,未来为会根据用户需求不断增强. 审计 CRUD 马云说过,996是修福报.对于多数程序员来说,加班是好事...起码不是闲人,不会下岗. 当如果因为某个 sql ...
- COJ968 WZJ的数据结构(负三十二)
WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...
- NeHe OpenGL教程 第三十二课:拾取游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- thinkPHP 模板中的语法知识 详细介绍(十二)
原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件 ==>记住常量的是大写 1.css link .js sc ...
- SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)
开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...
- ASP 三十二条精华代码 (1)
ASP 三十二条精华代码 (1) 2009-08-10 09:53:03 www.hackbase.com 来源:互联网 1. oncontextmenu="window.event.r ...
- [COJ0968]WZJ的数据结构(负三十二)
[COJ0968]WZJ的数据结构(负三十二) 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有一盏灯,初始均亮着.请你设计一个数据结构,回答M次操作. 1 x:将节点x上的灯拉一次,即亮变 ...
随机推荐
- wordcontent结对编程
合作者:201631062625 201631062127 代码地址:https://gitee.com/yzpdegit/ts 本次作业链接:https://www.cnblogs.com/yang ...
- Mysql学习总结(25)——MySQL外连接查询
1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必 ...
- Android自己定义处理崩溃异常
用过安卓手机的用户以及安卓开发人员们会时长碰到程序异常退出的情况.普通用户遇到这样的情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉.那么开发人员们在开发过程中遇到这样的情况给怎么办呢,当然,你不 ...
- android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题
关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题: 原因: 首先OnScrollListener是焦点滚动 ...
- matlab2017a doc 关联注册码
在 matlab 2017a 的命令行界面,输入doc **查看相关函数的帮助文档时,必须要关联注册码才可使用. 这种显然是在网络连接状况下给出的提示,也即主机处在网络连接状态,试图默认查找的网络中的 ...
- 49.AngularJs 指令directive之controller,link,compile
转自:https://www.cnblogs.com/best/tag/Angular/ 关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-cont ...
- 6.deque
#include <iostream> #include <deque> #include <algorithm> using namespace std; //序 ...
- CUDA笔记(六)
dim3是NVIDIA的CUDA编程中一种自定义的整型向量类型,基于用于指定维度的uint3 忽然发现需要再搞多机MPI的配置,多机GPU集群.好麻烦.. 这两天考完两门了,还剩下三门,并行计算太多了 ...
- shell call python
python -c "import os; p=os.getcwd(); print(p);print(p);print(p);print('test over')"
- @property 的本质是什么?
将访问.变量.访问控制进行了绑定:编译器负责自动合成. @dynamic:不会自动合成成员变量和存取方法. @property 的本质是什么?@property = ivar + getter + s ...