मैं यह प्रयोग कर रहा हूं
DELETE TableA
FROM TableA a
INNER JOIN
TableB b on b.Bid = a.Bid
AND [condition]
और @TheTXI का तरीका काफी अच्छा है, लेकिन मैंने जवाब और टिप्पणियां पढ़ीं और मैंने पाया कि जिन चीजों का जवाब दिया जाना चाहिए, वह शर्त है कि WHERE क्लॉज में शर्त का इस्तेमाल किया जा रहा है। इसलिए मैंने इसका परीक्षण करने और एक स्निपेट लिखने का फैसला किया, लेकिन उनके बीच एक सार्थक अंतर नहीं मिला। आप यहां एसक्यूएल स्क्रिप्ट देख सकते हैं और महत्वपूर्ण बात यह है कि मैंने इसे कॉमनेट के रूप में लिखना पसंद किया क्योंकि यह सटीक उत्तर नहीं है, लेकिन यह बड़ा है और टिप्पणियों में नहीं डाला जा सकता है, कृपया मुझे क्षमा करें।
Declare @TableA Table
(
aId INT,
aName VARCHAR(50),
bId INT
)
Declare @TableB Table
(
bId INT,
bName VARCHAR(50)
)
Declare @TableC Table
(
cId INT,
cName VARCHAR(50),
dId INT
)
Declare @TableD Table
(
dId INT,
dName VARCHAR(50)
)
DECLARE @StartTime DATETIME;
SELECT @startTime = GETDATE();
DECLARE @i INT;
SET @i = 1;
WHILE @i < 1000000
BEGIN
INSERT INTO @TableB VALUES(@i, 'nameB:' + CONVERT(VARCHAR, @i))
INSERT INTO @TableA VALUES(@i+5, 'nameA:' + CONVERT(VARCHAR, @i+5), @i)
SET @i = @i + 1;
END
SELECT @startTime = GETDATE()
DELETE a
--SELECT *
FROM @TableA a
Inner Join @TableB b
ON a.BId = b.BId
WHERE a.aName LIKE '%5'
SELECT Duration = DATEDIFF(ms,@StartTime,GETDATE())
SET @i = 1;
WHILE @i < 1000000
BEGIN
INSERT INTO @TableD VALUES(@i, 'nameB:' + CONVERT(VARCHAR, @i))
INSERT INTO @TableC VALUES(@i+5, 'nameA:' + CONVERT(VARCHAR, @i+5), @i)
SET @i = @i + 1;
END
SELECT @startTime = GETDATE()
DELETE c
--SELECT *
FROM @TableC c
Inner Join @TableD d
ON c.DId = d.DId
AND c.cName LIKE '%5'
SELECT Duration = DATEDIFF(ms,@StartTime,GETDATE())
यदि आप इस स्क्रिप्ट से अच्छा कारण प्राप्त कर सकते हैं या एक और उपयोगी लिख सकते हैं, तो कृपया साझा करें। धन्यवाद और इस मदद की उम्मीद है।