1

我有 3 个表,它们是多对多关系。IE:

 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.....
4

3 回答 3

1

我不明白你想做什么。可以使用简单的删除语句从表 CustomerProduct 中删除,如下所示:

  delete CustomerProduct 
  where ProductId = 1 and CustomerId  = 7
于 2013-01-18T02:22:12.097 回答
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;

您可以对其余的表执行此操作。这样,当您删除其中一个记录时,信息将在整个表格中被删除。

于 2014-08-28T13:49:19.040 回答
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);
于 2013-10-03T00:49:56.860 回答