我需要从一个表中删除数据,但对WHERE子句使用另一个表.因此,我只想删除在输出中获得的值,而不是不同表中的任何值.

我要从中删除数据的表有两行:ot_id和分类id

select 
t0.*
from ot_classification t0
left join
ot t1
on t0.ot_id=t1.id
where t1.ct = '22GC'
and t0.classification_id not in '157101'

我认为我应该做的是:

delete t0.ot,
t0.classification_id
from ot_classification t0
left join
ot t1
on t0.ot_id=t1.id
where t1.ct = '22GC'
and t0.classification_id not in '157101'

恐怕这也会删除t1.id,这不是我想要的.我怎么才能避免这种情况?

推荐答案

Oracle不支持您的delete语法.

我会推荐exists条:

delete from ot_classification t0
where 
    t0.classification_id != 157101
    and exists (
        select 1
        from ot t1
        where  t0.ot_id = t1.id and t1.ct = '22GC'
)

在Oracle 23c中,我们还可以将查询表述为:

delete ot_classification t0
from ot t1 
where 
    T0.ot_id = t1.id 
    and t1.ct = '22GC' 
    and t0.classification_id != 157101
    

Sql相关问答推荐

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

在SQL中使用类别值将行转置为列

PostgreSQL基于2个COLS的任意组合 Select 唯一行

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

如何从JSON数组中 Select 多个值

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

对列进行排序后,基于两列删除重复行

冲突查询的UPDATE时违反非空约束

在Postgres中合并相似的表

Postgres jsonpath运算符的变量替换,如_regex?

SQL OR子句如何在JOINON查询中工作?

在 Postgres 中将结果按几十年划分

将具有嵌套 XML 的列转换为 SQL 中的表格格式?

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

如何在sparksql查询中使用日期值?

将有效数字作为 varchar 返回的 SQL 函数

我需要遍历权重值表并确定每个权重是否有效

在 Athena / Presto 中提取 JSON 对象以获取动态密钥

连续日期的SQL

snowflake插入覆盖行为