我想從問題表和關係表中刪除所有匹配測驗ID的記錄。該查詢適用於select語句,但不允許刪除相同的語句。SQL從相關表中刪除
@quizId
是我傳入存儲過程的測驗Id值。有誰知道如何使用一條語句從兩個表中刪除?可能嗎?
DELETE tGeoQuestions as a, tGeoQuizToQuestion as b WHERE b.quizId = @quizId AND a.id = b.questionid
我想從問題表和關係表中刪除所有匹配測驗ID的記錄。該查詢適用於select語句,但不允許刪除相同的語句。SQL從相關表中刪除
@quizId
是我傳入存儲過程的測驗Id值。有誰知道如何使用一條語句從兩個表中刪除?可能嗎?
DELETE tGeoQuestions as a, tGeoQuizToQuestion as b WHERE b.quizId = @quizId AND a.id = b.questionid
您需要啓用級聯刪除,然後它會自動地發生,所有你需要做的是從與PK,所有的FK表的表中刪除會被自動刪除
否則就是2步操作
這樣的事情,把這個在TRAN
DELETE a
FROM tGeoQuestions as a
JOIN tGeoQuizToQuestion as b
ON a.id = b.questionid
AND b.quizId = @quizId
DELETE tGeoQuizToQuestion WHERE quizId = @quizId
你的第三個選項是在PK臺上的觸發器,從刪除一切FK表,如果它被PK表中刪除...我不會推薦觸發器
據我所知,這是不可能在一個單一的SQL語句。如果你有合適的關係設置,刪除會自動級聯。否則你必須發出2條刪除語句。
你可以在MySQL delete這樣做手工表明,該方法爲
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*] ...]
FROM table_references
[WHERE where_definition]
在SQL Server中,我認爲你要麼需要使用外鍵或刪除的問題,其中競猜= ...,然後從測驗表
我不確定是否可以用同樣的方法從兩個表中刪除相同的語句,您可以從兩個表中選擇。這在Oracle中至少是不可能的。
由於SQLMenace提到你最好的選擇是打開級聯。
要小心Cascade雖然,如果你對它非常根深蒂固的結構,它很容易消滅大量的數據。
試試這個:
DELETE a
FROM tGeoQuestions as a
INNER JOIN tGeoQuizToQuestion as b ON a.id = b.questionid
WHERE b.quizId = @quizId
順便說一句,你的SELECT語句acctually工作(我不知道至極是你的發言......)。
您必須更換隻
SELECT ...
與
DELETE [table name or alias]
,離開一切不變。
像湯姆一樣警告下面,小心使用級聯,因爲你會突然發現數據「丟失」 – 2009-07-07 20:05:40