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