我对OracleSQL查询并不十分了解,因此在删除表中的某些行时遇到了一个问题,该行必须满足一个约束,该约束包括另一个(联接)表的字段。换句话说,我想编写一个查询来删除包括JOIN的行。
在我的情况下,我有一个表ProductFilters和另一个Products连接在字段上的表ProductFilters.productID = Products.ID。我想从大于或等于200的行中删除行,ProductFilters并且ID它们引用的产品具有名称“ Mark”(名称是“产品”中的一个字段)。
ProductFilters
Products
ProductFilters.productID = Products.ID
ID
我想首先被告知Oracle中的Delete Query是否可以接受JOIN。如果不是这样,我应该如何修改此查询以使其起作用,因为在该表格上我收到错误消息:
DELETE From PRODUCTFILTERS pf where pf.id>=200 And pf.rowid in ( Select rowid from PRODUCTFILTERS inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID And PRODUCTS.NAME= 'Mark' );
根据我在上面的评论中链接的答案,此方法应该有效:
delete from ( select pf.* From PRODUCTFILTERS pf where pf.id>=200 And pf.rowid in ( Select rowid from PRODUCTFILTERS inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID And PRODUCTS.NAME= 'Mark' ) );
或者
delete from PRODUCTFILTERS where rowid in ( select pf.rowid From PRODUCTFILTERS pf where pf.id>=200 And pf.rowid in ( Select PRODUCTFILTERS.rowid from PRODUCTFILTERS inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID And PRODUCTS.NAME= 'Mark' ) );