MySQL多表操作

子查询与连接在多表操作中的使用

插入

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

 多表更新
 UPDATE table_reference
 SET col_name1={expr|DEFAULT}
 [,col_name1={expr|DEFAULT}]...
 [WHERE where_condition]

 *table_reference:表的参照关系

 内连接,外连接,左连接,右连接
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate=cate_name SET goods_cate=cate_id;
 有相同列名时
  UPDATE tdb_goods INNER JOIN tdb_goods_brands ON
    -> tdb_goods.brand_name=tdb_goods_brands.brand_name
    -> SET tdb_goods.brand_name=tdb_goods_brands.brand_id;
   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;
 
 创建表
 CREATE TABLE [IF NOT EXISTS] table_name(
 )select_statement
  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;

      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;

做一下修改~~   
================================================================
    ALTER TABLE tdb_goods
    -> CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,
    -> CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;    
=================================================================


自身连接(用于无限分类数据表)
-- 无限分类的数据表设计
   CREATE TABLE tdb_goods_types(
     type_id   SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     type_name VARCHAR(20) NOT NULL,
     parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 --父级类型
  );
 SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s JOIN tdb_goods_types AS p
    -> ON s.parent_id = p.type_id;    
   
多表删除重复记录
DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (
    -> SELECT goods_name,goods_id FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>=2) AS t2
    -> ON t1.goods_name=t2.goods_name
    -> WHERE t1.goods_id>t2.goods_id;


    
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值