DELETE a
FROM TableA a
JOIN TableB b ON a.Field1 = b.Field1 AND a.Field2 = b.Field2;
對比
DELETE
FROM TableA
WHERE Field1 IN (
SELECT Field1
FROM TableB
) AND Field2 IN (
SELECT Field2
FROM TableB
);
uj5u.com熱心網友回復:
兩個陳述句的邏輯條件不同。
第一條陳述句將洗掉 in 中的任何行,TableA如果它Field1同時Field2對應于 in 中一行的等效列TableB。
第二條陳述句將洗掉任何行中TableA,如果值Field1中不存在Field1的TableB,而價值Field2的存在Field2的TableB-但是,這并不一定是同一排。
如果將 更改為delete,則很容易看出差異select。
這是一個例子。首先,創建并填充示例表(請在您以后的問題中保存我們這一步):
CREATE TABLE A
(
AInt int,
AChar char(1)
);
CREATE TABLE B
(
BInt int,
BChar char(1)
);
INSERT INTO A (AInt, AChar) VALUES
(1, 'a'), (2, 'a'), (3, 'a'),
(1, 'b'), (2, 'b'), (3, 'b');
INSERT INTO B (BInt, BChar) VALUES
(1, 'a'),
(2, 'b'),
(3, 'c');
陳述(翻譯成select陳述):
SELECT A.*
FROM A
JOIN B
ON AInt = BInt AND AChar = BChar;
SELECT *
FROM A
WHERE AInt IN (
SELECT BInt
FROM B
) AND AChar IN (
SELECT BChar
FROM B
);
結果:
AInt AChar
1 a
2 b
AInt AChar
1 a
2 a
3 a
1 b
2 b
3 b
你可以看到現場演示 DB<>Fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387425.html
標籤:sql sql-server 查询语句
上一篇:正則運算式洗掉sql查詢中的HTML標簽、空行和空格
下一篇:過濾給定范圍資料的最佳方法
