现在存在下面的两张表,表的结构如下所示

师徒四人表结构:
id,user_name,over
数据:
id user_name over
1 唐僧 旃檀功德佛
2 猪八戒 净坛使者
3 孙悟空 斗战胜佛
4 沙僧 金身罗汉

孙悟空朋友表结构:
id,user_name,over
数据:
id user_name over
1 孙悟空 成佛
2 牛魔王 被降服
3 蛟魔王 被降服
4 鹏魔王 被降服
5 狮驼王 被降服

over字段表示最后的成就

我们创建上面的两张表

CREATE TABLE `shitu` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`user_name` varchar(22) NOT NULL,
`over` varchar(22) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `friend` (
`id` tinyint(4) NOT NULL auto_increment,
`user_name` varchar(22) default NULL,
`over` varchar(22) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

左连接:

mysql> select a.user_name , a.over ,b.over       from  shitu  as a             left join  friend as b on a.user_name = b.user_name;
+-----------+------------+----------+
| user_name | over | over |
+-----------+------------+----------+
| 唐僧 | 旃檀功德佛 | NULL |
| 猪八戒 | 净坛使者 | NULL |
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
| 沙僧 | 金剩罗汉 | NULL |
+-----------+------------+----------+
4 rows in set

inner join 连接:

mysql> select a.user_name , a.over ,b.over       from  shitu  as a
join friend as b on a.user_name = b.user_name;
+-----------+----------+----------+
| user_name | over | over |
+-----------+----------+----------+
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
+-----------+----------+----------+
1 row in set

右连接

mysql> select a.user_name , a.over ,b.over       from  shitu  as a             right
join friend as b on a.user_name = b.user_name;
+-----------+----------+----------+
| user_name | over | over |
+-----------+----------+----------+
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
| NULL | NULL | 被降服 |
| NULL | NULL | 被降服 |
+-----------+----------+----------+
3 rows in set

9.   使用join从句更新表

把同时存在于取经四人组和悟空兄弟表中的记录的人在取经四人表中的over字段更新为“齐天大圣”

1、第一步 首先取出两张表中都同时存在的人得到集合C

mysql> select a.user_name , a.over ,b.over from shitu as a join friend as b on a.user_name = b.user_name;

2、第二步:判断shitu表中那些人的人名在集合c中存在,如果存在将该记录更新成“齐天大圣”

上面是一种经典的设计思路,我们来看下面的代码


mysql> update
shitu as tmp1
set
tmp1.over = '齐天大圣'
where
tmp1.user_name
in
(
select
a.user_name
from
shitu as a
join
friend as b
on
a.user_name = b.user_name )
; 1093 - You can't specify target table 'tmp1' for update in FROM clause

如何解决该问题了

增加一个临时表解决上面的问题

mysql> update
shitu as tmp1
set
tmp1.over = '齐天大圣'
where
tmp1.user_name
in
(
select t2.user_name
from
(
select
a.user_name
from
shitu as a
join
friend as b
on
a.user_name = b.user_name ) as t2 )
;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from shitu;
+----+-----------+------------+
| id | user_name | over |
+----+-----------+------------+
| 1 | 唐僧 | 旃檀功德佛 |
| 2 | 猪八戒 | 净坛使者 |
| 3 | 孙悟空 | 齐天大圣 |
| 4 | 沙僧 | 金剩罗汉 |
+----+-----------+------------+
4 rows in set

 

参看博客:http://blog.csdn.net/fdipzone/article/details/52695371

上面这种代码比较复杂,可以进行优化,使用下面的代码进行优化,在数据量很大的时候上面的sql语句性能较低,可以使用下面的代码进行优化

 

慕课网--mysql开发技巧一 学习笔记的更多相关文章

  1. 慕课网,我的yii2学习笔记(基础篇)

    一.关于PHP知识点 1.命名空间:存放类文件的空间,可以随便定义,建议与类文件目录一致,方便管理. 注:(1).如果类没有设置命名空间,默认为顶级命名空间,在程序中可以用一下方式实例化. $mode ...

  2. 慕课网-Linux达人养成计划学习笔记

    mkdir -p [目录]创建目录-p 递归创建ls 查看当前目录下的文件和目录等其他文件 cd [目录]命令英文愿意:change directory切换所在目录简化操作cd ~ 进入当前用户的家目 ...

  3. MySQL实战45讲学习笔记:第三十九讲

    一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...

  4. 【MySql】赶集网mysql开发36条军规

    [MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux   写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...

  5. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客

    多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署

  6. [赶集网] 【MySql】赶集网mysql开发36条军规

    [赶集网] [MySql]赶集网mysql开发36条军规 (一)核心军规(1)不在数据库做运算   cpu计算务必移至业务层:(2)控制单表数据量   int型不超过1000w,含char则不超过50 ...

  7. MySQL事务控制语句(学习笔记)

    MySQL事务控制语句(学习笔记) MySQL事务控制语句         在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begi ...

  8. 赶集网mysql开发36军规

    赶集网mysql开发36军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 (2)控 ...

  9. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记

    <疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...

随机推荐

  1. jdk生成keystore、tomcat配置https

    一.首先利用jdk自带工具keytool生成keystore,命令如下:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysi ...

  2. 05 . 前端之BootStrap

    BootStrap简介 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端开 ...

  3. Splay代码简化版

    皆さん.こんにちは.上一篇文章,我们讲了Splay如何实现.这一篇我们来让我们的伸展树短一点. 上一篇Splay讲解的链接:リンク. 首先还是变量的定义,在这里呢,我把一些小函数也用Define来实现 ...

  4. Java实现 LeetCode 227 基本计算器 II(二)

    227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...

  5. Java实现 LeetCode 208 实现 Trie (前缀树)

    208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...

  6. Java实现 LeetCode 213 打家劫舍 II(二)

    213. 打家劫舍 II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗 ...

  7. Java实现填符号凑算式

    匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 ...

  8. 汇编指令mov、add、sub、jmp

    mov:寄存器,数据 mov:寄存器,寄存器 mov:寄存器,内存单元 mov:段寄存器,内存单元 mov:内存单元,寄存器 mov:内存单元,段寄存器 mov:段寄存器,寄存器 mov:寄存器,段寄 ...

  9. 温故知新-Mysql索引结构&页&聚集索引&非聚集索

    文章目录 摘要 索引 索引概述 索引优势劣势 索引结构 BTREE 结构 B+TREE 结构 页 索引分类 索引语法 索引设计原则 聚触索引 & 非聚触索引 你的鼓励也是我创作的动力 Post ...

  10. 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...