从第一个 table 中删除不匹配的记录

delete unmatched records from first table

我有 table 1 和 table 2 - 左连接表示,我们可以认为如下 -

我想在 table 1 上执行删除,如下所示 - 橙色高亮部分应该被删除

我正在尝试类似的方法 - 但它不起作用。

  delete from  MY_SCHEMA.TABLE1 DL   LEFT JOIN MY_SCHEMA.TABLE2  ERR_TB on 
   DL.DL_ID1 = ERR_TB.ERR_ID1    and  DL.DL_ID2 = ERR_TB.ERR_ID2   ;

是否可以如图2所示进行删除。我想从 table 1.

中删除橙色记录

感谢任何帮助,提前致谢:) 注意 - 这里没有 PK 和 FK,table1 和 table2 有 - 2 个相同的列 - 它们没有相互关联或依赖

你可以试试 not exists :

delete my_schema.table1 t1 
 where not exists ( select 1 from table2 t2 where t2.id = t1.id2 );

minus

delete my_schema.table1
 where id2 in ( select t1.id2 from table1 t1 minus
                select t2.id  from table2 t2  );

dbfiddle uk demo

使用NOT EXISTS过滤出匹配的行。
其余行是 table2 中没有对应行的行,这些行将被删除。

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE ERR_TB.id1 = DL.id1 
       AND ERR_TB.id2 = DL.id2
) 

以上代码基于您的join声明。
如果您只需要 ERR_TB.id1 = DL.id1ERR_TB.id2 = DL.id2,则使用以下其中一项:

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE ERR_TB.id1 = DL.id1 
)  

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE  ERR_TB.id2 = DL.id2
) 

这个对我有用,希望对你有帮助:

delete t1 from table1 t1
join table2 t2
on t1.id1 = t2.id1
where t1.id1 = t2.id1 and t1.id2 = t2.id2