当前位置:首页 » 编程语言 » sql联表删除
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql联表删除

发布时间: 2022-03-08 01:36:29

sqlserver两张表数据联级删除问题

给你做个简单试验吧

创建class表,里边其他字段我就略了

createtableclass(classidintnotnullprimarykey,
classnamevarchar(20))

创建学生表

createtablestudent(studentidintnotnullprimarykey,
studentnamevarchar(10),
classidint)

添加外键级联删除或更新约束

_classidforeignkey(classid)referencesclass(classid)

向class表增加数据

insertintoclassvalues(1,'1班')
insertintoclassvalues(2,'2班')

向student表增加数据

insertintostudentvalues(1,'aa',1)
insertintostudentvalues(2,'bb',2)
insertintostudentvalues(3,'cc',3)--这条是增加不进去的,会报错

删除class表里一班的数据

deletefromclasswhereclassid=1

检查 student 表里数据

这个时候你就发现,为1班学生的那数据也同时被删了

② sql多表关联删除

删除多表关联数据的三种方法

1、级联删除

createtablea
(
idvarchar(20)primarykey,
passwordvarchar(20)notnull
)
createtableb
(
idintidentity(1,1)primarykey,
namevarchar(50)notnull,
userIdvarchar(20),
foreignkey(userId)referencesa(id)ondeletecascade
)



表B创建了外码userId 对应A的主码ID,声明了级联删除

测试数据:

insertavalues('11','aaa')
insertavalues('23','aaa')
insertbvalues('da','11')
insertbvalues('das','11')
insertbvalues('ww','23')


删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了

deleteawhereid='11'


2、采用存储过程

A表:AID Aname 主健:AID

B表:BID BelongAID Bname 主健:BID,外健:BelongAID

C表:CID BelongBID Cname 主健:CID,外健:BelongBID

D表:DID BelongCID Dname 主健:DID,外健:BelongCID

其中:

A表和B表通过A.AID和B.BelongAID 创建了外健关系

B表和C表通过B.BID和C.BelongBID 创建了外健关系

C表和D表通过C.CID和D.BelongCID 创建了外健关系


3、采用触发器

删除Class表中的一条记录的同时删除该记录Class_No字段值在Student表中对应的记录。

CreateTriggerClass_delete
onClass
fordelete
as
begin
deletefromStudent
whereClass_No=(selectClass_Nofromdeleted)
end

③ sql 两个表关联删除数据

删除主-从表的记录可以建立简单存储过程来实现:
CREATE PROCEDURE [存储过程]
(
@Id VARCHAR(50)
)
AS
DELETE [子表] WHERE [关联Id] = @Id
DELETE [主表] WHERE [Id] = @Id
GO

执行方法:EXECUTE [存储过程] @Id

④ sql跨表删除

你说的这个问题有些麻烦:
首先,用一个存储过程解决是最方便的:
IF OBJECT_ID('del', 'P') IS NOT NULL
DROP PROC del
GO
CREATE PROC del
@stuname INT
AS
DECLARE @ID INT
SELECT @ID=id FROM student where name=@stuname --得到id
delete from student where id=@Id
delete from mark where id=@id
GO
执行此存储过程:
EXEC del 'rose'

如果只能是只写一个语句的话,那就只能先定义好表
chengji表中的id列是student表的外键,
然后就是级联删除,用到CASCADE。
完整点写出来就是:
alter table mark
add
constraint fk_student_id
foreign key references mark(id)
on delete cascade --这一行是关键,默认是不级联删除
-- on delete no action
这样我们只要删除表student中的数据就可以同时删除mark表中的数据
delete from student where name='rose'

你要是还有问题就再让让我吧。希望你能早点解决这个问题

⑤ sql中多表关联删除

分成两句执行,或写存储过程。
分成两句写时注意包括在一个事务中,避免一个成功一个失败。

⑥ SQL 多个表关联查询!和删除!

两个表之间就没有什么关系么? 比如 表一的某字段 = (或者</>=/<=/<>) 表二的某字段

⑦ sql多表连接删除问题

把这些表中的comid分别作为lm_company表comid的外键添加级联删除功能可以了

⑧ sql多表连接 查询 与删除

1:
SELECT
客户姓名
订单号
时间
FROM
订单表
JOIN 客户表
ON ( 订单表.UID = 客户表.UID)
JOIN
订单时间表
ON ( 订单表.DID = 订单时间表.DID)
WHERE
( SELECT COUNT(*) FROM 订单表 d WHERE d.UID = 客户表.UID ) > 3

2:
-- 先删除 订单时间表
DELETE
订单时间表
WHERE
DID IN (
SELECT DID FROM
订单表
JOIN 客户表
ON ( 订单表.UID = 客户表.UID)
WHERE
客户姓名 = '张三'
);

-- 后删除 订单表.
DELETE
订单表
WHERE
UID IN ( SELECT UID FROM 客户表 WHERE 客户姓名 = '张三');

-- 最后删除 客户表
DELETE
客户表
WHERE
客户姓名 = '张三';

⑨ sql多表删除语句 在线等

--1 如何删除type的一条记录
go
create proc procDeleteTypeById
@TID int
as
begin
--先删除最外层子表的关联记录 (pront表)
delete from proct where mstid in(select mstid from mstype where stid in(select stid from stype where tid=@TID))
--在删除mstype表中的关联记录
delete from mstype where stid in(select stid from stype where tid=@TID)
--在删除stype表中关联记录
delete from stype where tid=@TID
--最后删除根表记录
delete from [type] where tid=@Tid
end

--2 删除stype表中记录同上
go
create proc procDeleteStype
@STID int
as
begin
--先删除最外层子表的关联记录 (pront表)
delete from proct where mstid in(select mstid from mstype where stid=
@STID)
--在删除mstype表中的关联记录
delete from mstype where stid=@STID
--最后删除根表中的关联记录
delete from stype where stid=@STID
end

⑩ sql语句多表删除问题

原则上,同意youyuan1688和ytbelwxg的方法. 5个表,如果每个表都和lm_company表的comid字段有直接主外键关系.那么ytbelwxg的方法是最佳方案; 仔细看了你的连接条件,猜想,并不是每个表都和lm_company表的comid字段有直接主外键关系.所以通过主外键级联删除的方案就不可行,那么就必须逐个表来删除,而且删除的顺序也有讲究,先删子表,再删主表. 本例中,删除的顺序应该是e,d,c,b,a; --1.删除e; sql1="delete from lm_newsinfo from lm_newsinfo as e, lm_company as a where a.comid=e.news_comid and a.comid=" + lblid.Text +";" --2.删除d; sql2="delete from lm_message from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c ,lm_message as d where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and c.Bkinfo_id=d.message_bookid and a.comid=" + lblid.Text +";" --删除c; sql3="delete from lm_Bookinfo from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and a.comid=" + lblid.Text + ";" --删除b; sql4="delete from lm_Yuzhan where yuzhan_comid=" + lblid.Text + ";" --删除a; sql5="delete from lm_company where comid=" + lblid.Text + ";" --合并sql1,sql2,sql3,sql4,sql5 sql=sql1+sql2+sql3+sql4+sql5 --在你的客户端执行sql命令串即可