Bunu kullanıyorum
DELETE TableA
FROM TableA a
INNER JOIN
TableB b on b.Bid = a.Bid
AND [condition]
@ @TXI yolu yeterince iyi ama cevapları ve yorumları okudum ve bir şeyin cevaplanması gerektiğini buldum, WHERE yan tümcesinde veya birleştirme koşulu olarak koşul kullanıyor. Bu yüzden test etmeye ve bir pasaj yazmaya karar verdim ancak aralarında anlamlı bir fark bulamadım. Burada sql betiğini görebiliyorsunuz ve önemli nokta, bu kesin cevap olmadığı için comnet olarak yazmayı tercih ettim, ancak büyük ve yorumlara konulamıyor, lütfen affedin.
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())
Bu senaryodan iyi bir neden alabilir veya başka bir faydalı yazı yazabiliyorsanız lütfen paylaşın. Teşekkürler ve umarım bu yardım.