Удалить с помощью "Присоединиться" в Oracle sql Query
Я не очень хорошо знаком с Oracle Sql Queries, поэтому мне приходится сталкиваться с проблемой удаления некоторых строк из таблицы, которая должна выполнять ограничение, которое включает в себя поля другой (присоединения) таблицы. Другими словами, я хочу написать запрос для удаления строк, включая JOIN.
В моем случае у меня есть таблица ProductFilters
, а другая таблица Products
связана с полями ProductFilters.productID = Products.ID
. Я хочу удалить строки из ProductFilters
с ID
выше или равным 200, а продукт, на который они ссылаются, имеет имя "Mark" (имя - это поле в Product).
Я хотел бы получить информацию изначально, если JOIN является приемлемым в Delete Query в Oracle. Если нет, как мне изменить этот запрос, чтобы он работал, поскольку в этой форме я получаю сообщение об ошибке:
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'
);
Ответы
Ответ 1
Основываясь на ответе, о котором я говорил в своем комментарии выше, это должно работать:
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'
)
);
Ответ 2
Недавно я узнал о следующем синтаксисе:
DELETE (SELECT *
FROM productfilters pf
INNER JOIN product pr
ON pf.productid = pr.id
WHERE pf.id >= 200
AND pr.NAME = 'MARK')
Я думаю, что он выглядит намного чище, чем другой предлагаемый код.