MySQL学习笔记(18)——多表更新、连接

原创 2018年04月15日 15:00:37

前置工作

新建一张物品类别表:

 CREATE TABLE IF NOT EXISTS tdb_goods_cates
     (
     cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     cate_name VARCHAR(40) NOT NULL
     );

从tdb_goods表中查出所有类别:

 SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

使用INSERT tb_name SELECT …添加记录:

INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

于是,tdb_goods_cates数据如下:
select *


多表更新

参照另外的表来对本表的更新。
UPDATE table_references
SET col_name1={expr1 | DEFAULT}
[, col_name2={expr2 | DEFAULT}] …
[WHERE where_condition]

连接

MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。
连接类型:

  • inner join,内连接
    在mysql,join,cross join和inner join 是等价的。
  • left [outer] join,左外连接
  • right [outer] join,右外连接

语法结构:
table_references {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN} table_reference ON conditional_expr

demo:
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate=cate_name SET goods_cate=cate_id;
参照tdb_goods_cates表的cate_name来修改tdb_goods的goods_cate。
jinner join


CREATE … SELECT

创建数据表通知书将查询结果写入到数据表
CREATE TABLE [IF NOT EXISTS] tb_name
[(create_definition,…)]
select_statement

demo:
目标:把tdb_goods的brand_name参照tdb_goods_brands表更新成ID形式
tdb_goods_brands表,创建:

 CREATE TABLE tdb_goods_brands
     (
     brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     brand_name VARCHAR(40) NOT NULL
     )
     SELECT brand_name FROM tdb_goods GROUP BY brand_name;
  1. SELECT * FROM tddb_goods_brands;
  2. UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name=b.brand_name SET g.brand_name=b.brand_id;
    update

PS:记得修改列的数据类型来减少字节数的使用。

ALTER TABLE tdb_goods
     CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,
     CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

change

版权声明:一起学习咯! https://blog.csdn.net/qq_32953185/article/details/79949397

Mysql也可以联合多表更新和删除

Mysql也可以联合多表更新和删除(节选自mysql手册)多表更新在 MySQL 3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。 如果一个 ORDER BY 子句被使用(...
  • shimch
  • shimch
  • 2006-03-10 16:45:00
  • 10830

MySQL联合多表更新和删除

多表更新 在 MySQL 3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。  如果一个 ORDER BY 子句被使用(从 MySQL 4.0.0 开始支持),记录行...
  • scholar_man
  • scholar_man
  • 2015-07-11 16:39:17
  • 1604

mysql单表更新及多表更新

单表更新 多表更新 update `table1` a,`wms1.0_tablename` b set a.grouping=b.grouping,a.size=b.size,a...
  • langcai1981
  • langcai1981
  • 2014-05-08 17:23:10
  • 9089

MySQL多表联合更新不支持解决方案

mysql分布式库中,多表关联更新字段的值,提示不支持 老司机是这样做的select concat(' update slp_prop_rule set mpvltp = ' ' ' , b.pr...
  • u014330351
  • u014330351
  • 2017-03-21 16:01:35
  • 358

MySQL数据库——‘多表’的基本操作(更新、删除、创建写入)

1.多表更新--基本格式 UPDATE table_references SET col_name1 = {expr1|DEFAULT} [,col_name2 = {expr2|DEFAULT}]....
  • peng_666666
  • peng_666666
  • 2017-02-21 15:38:05
  • 450

MySQL中的多表连接

现有表R,S如下: 笛卡尔积 select * from R,S;   结果: 注:不需要任何条件。结果为两张表函数相乘(3x3=9)。     连接类型 分为三种:交叉连接、内连接、外连...
  • godbaby0312
  • godbaby0312
  • 2013-12-17 15:48:58
  • 1962

MySQL 多表关联更新及删除

一、      多表关联更新 问题描述:现有tdb_goods表(含有具体信息)和tdb_goods_cates表(没有具体信息),需要查询tdb_goods表的所有记录,并且按"类别"分组,且将分...
  • qq_36527839
  • qq_36527839
  • 2017-04-07 18:31:36
  • 1014

Mysql多表查询常用连接方式

不同数据库的连接查询分类和形式稍有不同,其中Mysql连接查询的常用形式如下。本文并没有对连接查询进行严谨详细的分类,过于详细反而容易迷糊。为了方便以后使用,小的死磕之后进行了简单的归纳总结。...
  • dzy15580807943
  • dzy15580807943
  • 2016-12-14 11:01:25
  • 412

mysql多表关联更新和in效率问题

#重新下发投放配置,只下放投放状态的单子 1.单表where查询更新 UPDATE bus_execute_sync b SET b.flag = 0 WHERE b.execid IN(SELE...
  • andyzhaojianhui
  • andyzhaojianhui
  • 2015-12-11 18:51:41
  • 1734

mysql left join 左连接查询关联n多张表

最近用mysql 多表关联查询比较多,特此总结一下left join用法,拓展下left join将多表关联。left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不...
  • u011250851
  • u011250851
  • 2016-07-19 00:06:52
  • 5992
收藏助手
不良信息举报
您举报文章:MySQL学习笔记(18)——多表更新、连接
举报原因:
原因补充:

(最多只允许输入30个字)