arj*_*soh 42 sql oracle sql-delete
我对Oracle Sql查询并不十分熟悉,因此我在从表中删除某些行时遇到问题,这些行必须满足包含另一个(连接)表的字段的约束.换句话说,我想编写一个查询来删除包括JOIN在内的行.
在我的情况下,我有一个表ProductFilters和另一个表Products连接在一起的表ProductFilters.productID = Products.ID.我想删除高于或等于200 的行,ProductFilters并且ID他们引用的产品名称为"Mark"(名称是Product中的字段).
我想最初通知如果在Oracle的删除查询中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'
);
Run Code Online (Sandbox Code Playgroud)
xlo*_*gic 69
最近我学到了以下语法:
DELETE (SELECT *
FROM productfilters pf
INNER JOIN product pr
ON pf.productid = pr.id
WHERE pf.id >= 200
AND pr.NAME = 'MARK')
Run Code Online (Sandbox Code Playgroud)
我认为它看起来比其他提议的代码更清洁.
dav*_*vek 35
基于我在上面的评论中链接到的答案,这应该有效:
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'
)
);
Run Code Online (Sandbox Code Playgroud)
要么
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'
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106687 次 |
| 最近记录: |