SQL - 使用另一个 table 删除 table 中的特定一组原始数据
SQL - Delete specific set of raw in a table using another table
表 1:
ID1
ID2
ID3
主 ID
位置
1
一个
X
1AX
维多利亚州
2
B
Y
2BY
悉尼
3
C
W
3CW
TAS
4
D
Z
4DZ
TAS
表 2:
销售 ID
数量
AMT
差异
1AX
1
100
2
2BY
2
0
3
3CW
3
5
4DZ
3
12
2
忽略其他字段,我需要删除表 1 中的所有原始数据,其中表 2 中的 AMT 的 SALESID 零值或无值。
例如查询后,表1只保留包含1AX & 4DZ的raws
您可以使用 exists
:
delete from table1
where exists (select 1
from table2 t2
where table1.mainid = t2.salesid and
(t2.amt = 0 or t2.amt is null)
);
这可以通过子查询来完成
- 从 table2 中获取所有 MainID,其中 amt 为 0 或 null
- 删除与之前获取的 MainID 相同的所有行
delete from table1 where MainID in (
select SALESID from table2 where AMT <=0 or AMT is null
)
认为 INNER JOIN 在更大的数据集上会更快。像这样:
DELETE
T1
FROM
Table1 T1
INNER JOIN
Table2 T2 ON T2.SalesID = T1.MainID
WHERE
IsNull(T2.Amt,0) = 0
表 1:
ID1 | ID2 | ID3 | 主 ID | 位置 |
---|---|---|---|---|
1 | 一个 | X | 1AX | 维多利亚州 |
2 | B | Y | 2BY | 悉尼 |
3 | C | W | 3CW | TAS |
4 | D | Z | 4DZ | TAS |
表 2:
销售 ID | 数量 | AMT | 差异 |
---|---|---|---|
1AX | 1 | 100 | 2 |
2BY | 2 | 0 | 3 |
3CW | 3 | 5 | |
4DZ | 3 | 12 | 2 |
忽略其他字段,我需要删除表 1 中的所有原始数据,其中表 2 中的 AMT 的 SALESID 零值或无值。 例如查询后,表1只保留包含1AX & 4DZ的raws
您可以使用 exists
:
delete from table1
where exists (select 1
from table2 t2
where table1.mainid = t2.salesid and
(t2.amt = 0 or t2.amt is null)
);
这可以通过子查询来完成
- 从 table2 中获取所有 MainID,其中 amt 为 0 或 null
- 删除与之前获取的 MainID 相同的所有行
delete from table1 where MainID in (
select SALESID from table2 where AMT <=0 or AMT is null
)
认为 INNER JOIN 在更大的数据集上会更快。像这样:
DELETE
T1
FROM
Table1 T1
INNER JOIN
Table2 T2 ON T2.SalesID = T1.MainID
WHERE
IsNull(T2.Amt,0) = 0