當前位置:首頁 » 編程語言 » 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命令串即可