sql - 如何删除多个列 IN\NOT IN 其他表?
问题描述
我有一个目标表和一个源表
并且只有当某些列的数据出现在另一个表(源表)中时,我才想从中删除一行
例如:
要从中删除的目标表:
| Delivery | Order | Row | OtherColumn |
|:----------:|:-----------:|:------------:|:------------:|
| 1 | A | 000010 | asaf |
| 1 | A | 000020 | ag |
| 2 | C | 000010 | DEL |<-I WANT TO DELETE THIS ROW
| 2 | D | 000020 | hhs |
| 3 | E | 000040 | ba |
| 3 | E | 000170 | ass |
源表,在这里我有一行我想保留在目标表中:
| Delivery | Order | Row |
|:----------:|:-----------:|:------------:|
| 2 | D | 000020 |
我正在寻找目标表的结果是:
| Delivery | Order | Row | OtherColumn |
|:----------:|:-----------:|:------------:|:------------:|
| 1 | A | 000010 | asaf |
| 1 | A | 000020 | ag |
| 2 | D | 000020 | hhs |
| 3 | E | 000040 | ba |
| 3 | E | 000170 | ass |
这意味着,如果交付编号 2 的所有行不在源表中,它们将被删除
我将 Delivery 参数设置为 @Delivery
我尝试的是:
delete from Target
where Delivery = @Delivery
and ([Delivery],[Order],[Row]) not in (select [Delivery],[Order],[Row]
from Source)
但是有一个语法错误,我知道在 NOT IN 运算符中不能接受多列,
我能做些什么?
解决方案
尝试使用不存在:
delete from Target
from Target target
where Delivery = @Delivery
and NOT EXISTS (select 1 from Source s where s.[Delivery] = target.Delivery and
s.[Order] = target.[Order] and s.[Row] = target.[Row] )
推荐阅读
- java - 如何重命名在构建过程中创建的文件夹?它一直回到原来的名字
- android - 对象在应用程序相机的边缘显得模糊
- javascript - Javascript 表组产品
- c# - EFCore throw 中的单独命令/查询 DbContext 已经有一个打开的 DataReader
- java - 自 Java 9 以来,如何在运行时动态加载 JDBC 驱动程序?
- symfony4 - Easyadmin 捆绑类型的选定值:实体
- c# - 如何配置 WebpackDevServer 以使用 ASP.NET CORE 2.0 IISEXPRESS 运行应用程序
- windows - Caffe 的 Windows fork 可以用于对象检测吗?
- pytorch - 如何在 pytorch 中使用多个 GPU?
- python - 是否有 Python Statsmodels OLS 函数在拟合回归后仅获取统计显着系数?