多表联查时的sql删除语句的写法,即级联删除,将相关联的数据级联删除

mysql多表关联删除

 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释:

  1 delete from t1 where 条件

  2 delete t1 from t1 where 条件

  3 delete t1 from t1,t2 where 条件

  4 delete t1,t2 from t1,t2 where 条件

  前 3者是可行的,第4者不可行。

  也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,在两个表之间建立级联删除关系,则可以实现删除一个表的数据时,同时删除另一个表中相关的数据。

  1、从数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉1 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id

  2、从数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉1 DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL 或 DELETE FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL

  3、 从两个表中找出相同记录的数据并把两个表中的数据都删除掉1 DELETE t1,t2 from t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25

  注意此处的delete t1,t2 from 中的t1,t2不能是别名

  如:1 delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25

  在数据里面执行是错误的(MYSQL 版本不小于5.0在5.0中是可以的)

  上述语句改 写成1 delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25

  在数据里面执行是错误的(MYSQL 版本小于5.0在5.0中是可以的)

delete category,news from category left join news on category.id = news.category_id

那么问题来了,怎么对SQL多表联合查询实现插入/更新/删除?

具体描述:有两个表相关联,比如A是主表,B是A的关联从表。A和B各自的主键都是自动增长的。

所以插入顺序:先插入A,再插入B;

更新顺序:随意;

删除顺序:先删除B,再删除A;

删除的方法同上的解释:

1、删除B时的联合查询语句如下

delete B from B,A where RTRIM(FailureMode)=RTRIM(@FailureMode) and RTRIM(ShiftCode)=RTRIM(@ShiftCode)

其中FailureMode是B的字段,@FailureMode是值

ShiftCode是A的字段,@ShiftCode是值

因为字段不重名,所以不用特变限定是哪个表的

2、插入B时的联合查询语句如下

insert into B(EfficiencyID,FailureMode,Reject,RejectYield) (select EfficiencyID,RTRIM(@FailureMode),@Reject,@RejectYield from A where RTRIM(ShiftCode)=RTRIM(@ShiftCode) and RTRIM(SiteCode)=RTRIM(@SiteCode))

其中Reject,RejectYield,FailureMode是B的字段

ShiftCode是A的字段

A和B 是通过EfficiencyID关联的,注意语句写法

3、更新的联合查询语句如下

update B set [email protected],[email protected] from B,A where RTRIM(FailureMode)=RTRIM(@FailureMode) and RTRIM(ShiftCode)=RTRIM(@ShiftCode)

其中Reject,RejectYield,FailureMode是B的字段

ShiftCode是A的字段

其余同上

原文地址:https://www.cnblogs.com/pengzp97/p/10292191.html

时间: 2024-09-30 15:35:59

多表联查时的sql删除语句的写法,即级联删除,将相关联的数据级联删除的相关文章

MyBatis(四)关于多表联查 关联关系之一--------一对多(单条sql语句查询)

在MyBatis中,进行多表联查时关联关系主要有这几种:一对多,多对一,多对多,还有一种自关联 1.一对多:有两种方式 (1)用一条sql语句进行查询    (以查询部门和员工为案例) 首先创建实体类 package entity; import java.util.List; /** * Created by mycom on 2018/2/26. */ public class Dept {//部门 private Integer deptNo; private String deptNam

数据库表的管理(使用T-SQL语句)

使用T-SQL语句操作数据表使用SQL Server Managenment 中对数据进行插入,更新或者删除比较简单.除此外,使用T-SQL语句实现表数据的插入,更新和删除等操作. 1.插入数据INSERT语法格式如下INSTER [INTO] <表名> [列名] VALUES <列表值>其中:[INTO]是可选的,可以省略.表名是必须的,而表的列是可选的.多个列名和多个值列表用逗号分隔. 2.更新数据UPDATE语法格式如下UPDATE <表名> SET <列名

SpringBoot整合mybatis多表联查之数据库建表

1.各关联表尽量不要使用相同的字段.因为在多表联查时,如果出现相同的字段,数据库自动使这些相同字段的值相等. 比如说,订单表有一个表示订单状态的status字段,而它的外键关联的表car有一个表示车状态的status字段,这两个status表示的含义完全不一样,但因为两个status字段一样,数据库默认将他们的值相等,导致数据失真. 2.在mapper.xml文件中使用的sql语句,应先在数据库测试成功后才使用. 3.在运行整个项目之前,应先对各个mapper,service,controlle

Sql去重语句

海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复? 如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重: 1 delete from 表 where id not in 2 (select max(id) from 表 group by mobilePhone,officePhone,email ) 3 or 4 delete from 表 where id not in 5

结合真实的测试实例,记录一次SQL语句辅助功能测试的场景(包含多表联查及子查询)

本文结合实例讲解一下 SQL 语句通过数据库辅助进行功能测试.希望阅读本文的小伙伴,能通过这个场景实例体会到SQL 语句在真实的功能测试时起到的作用 本次功能测试涉及的sql 知识点如下: 1 SELECT 查询 2 where 子句 3 count() 4 to_char() 5 group by 6 order by 7 两表联查(这里涉及left join) 8 子查询嵌套 实例中的需求文档 : 系统的测试界面:(不好意思,写文章的时候,想去截一个好一点的图片,测试环境无法登录了) 前提解

SQL DELETE 语句:删除表中的记录语法及案例剖析

SQL DELETE 语句 DELETE 语句用于删除表中的记录. SQL DELETE 语句 DELETE 语句用于删除表中的行. SQL DELETE 语法 DELETE FROM table_name WHERE some_column=some_value; 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除.如果您省略了 WHERE 子句,所有的记录都将被删除! 演示数据库 在本教程中,我们将使用 样本数据库. 下面是选自 "W

SQL Server插入数据和删除数据基础语句使用

首先在我的Student表中插入几条数据,由于我的表已经创建完成了,所以就没有创建表的 sql 语句了,不过可以看我的上一篇文章: http://www.cnblogs.com/Brambling/p/6649350.html 插入数据sql语句: 1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height) 2 select '001','项羽','男','190' union 3 select '002','刘邦','男','170' union

五表联查sql和复选框 增删改查

这是五表联查的效果图,如果这个不明显,那么用添加说话 这样就明显了把 这个送餐时间和地点,都是一对多的,那么这个菜单就是多对多,其实对于老鸟来说没有什么大不了,但是对于新手,我希望还是可以有点帮助的,这个是用Mybatis写的 首先我们先把sql给贡献出来,或许有些丑,不过,这反正也是给自己写的随笔无所谓了 select a.*,b.fname from    (select a.*,c.aname from (select a.*,b.name tname from    t_order a,

SQLSERVER数据库、表的创建及SQL语句命令

SQLSERVER数据库,安装.备份.还原等问题: 一.存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1.卸载原来的sql server 2000.2005,然后再安装sqlserver 2008,否则经常sql server服务启动不了 2.sql server服务启动失败,解决方法: 进入sql serverconfigure manager,点开 Sql server 网络配置(非sql native client 配置),点sqlzhh(