Tôi đang sử dụng cái này
DELETE TableA
FROM TableA a
INNER JOIN
TableB b on b.Bid = a.Bid
AND [condition]
và cách @TheTXI là đủ tốt nhưng tôi đã đọc câu trả lời và nhận xét và tôi thấy một điều phải được trả lời là sử dụng điều kiện trong mệnh đề WHERE hoặc như điều kiện tham gia. Vì vậy, tôi quyết định thử nghiệm nó và viết một đoạn trích nhưng không tìm thấy sự khác biệt có ý nghĩa giữa chúng. Bạn có thể thấy tập lệnh sql ở đây và điểm quan trọng là tôi thích viết nó dưới dạng commnet vì đây không phải là câu trả lời chính xác nhưng nó rất lớn và không thể đưa ra ý kiến, xin vui lòng cho tôi biết.
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())
Nếu bạn có thể có được lý do chính đáng từ kịch bản này hoặc viết một hữu ích khác, xin vui lòng chia sẻ. Cảm ơn và hy vọng sự giúp đỡ này.