我有3个表,它们是多对多的关系。即:
Create Table Product(ProductId number(18,0) NOT NULL);
Create Table Customer(CustomerId number(18,0) NOT NULL);
Create Table CustomerProduct(CustomerId number(18,0) NOT NULL,ProductId number(18,0) NOT NULL);
由于CustomerProduct表引用了Product和Customer表。我试图从CustomerProduct表中删除数据。
我只能找到类似的东西:
DELETE FROM
(
SElECT CustomerProduct.* FROM CustomerProduct
INNER JOIN Product ON Product.ProductId = CustomerProduct.ProductId
INNER JOIN Customer ON Customer.CustomerId = CustomerProduct.CustomerId
WHERE Product.ProductId = 1 AND Customer.CustomerId = 7
);
注意:外键上没有定义CASCADE删除... Oracle不允许我在SQL SERVER中执行某些操作
DELETE A
FROM A
INNER JOIN B on a.Id = b.id
WHERE b.Id = 2.....
答案 0 :(得分:1)
我不明白你想做什么。 从表CustomerProduct中删除可以使用简单的delete语句完成,如下所示:
delete CustomerProduct
where ProductId = 1 and CustomerId = 7
答案 1 :(得分:1)
我遇到了同样的问题。我用触发器解决了很好的问题。
create or replace TRIGGER "AUTO_DELETE_PRODUCTS"
BEFORE DELETE ON Product
FOR EACH ROW
BEGIN
DELETE FROM CustomerProduct WHERE CustomerProduct.ProductId = :old.ProductId;
END;
您可以为其余表执行此操作。这样当你删除其中一条记录时,信息就会被删除。
答案 2 :(得分:0)
我花了几个小时试图解决这个问题,你在问题中得到了正确答案。但是,如果您将查询更改为关系表中不存在相关条件的位置,那么为什么需要连接会更有意义。
类似的东西:
CREATE TABLE Product(ProductId number(18,0) NOT NULL, Name VARCHAR2(30));
CREATE TABLE Customer(CustomerId number(18,0) NOT NULL, Name VARCHAR2(30));
DELETE FROM
(SELECT cp.*
FROM CustomerProduct cp
INNER JOIN Product p ON p.ProductId = cp.ProductId
INNER JOIN Customer c ON c.CustomerId = cp.CustomerId
WHERE c.Name LIKE 'TEST%' AND p.Name IS NULL);