【问题标题】:How to delete a row from a relationship table using two columns如何使用两列从关系表中删除一行
【发布时间】:2021-03-31 16:22:21
【问题描述】:

我正在尝试删除表 T1 上的表 T2 和 T3 之间的关系。 我已经搜索过,但只能找到只有一个 INNER JOIN 的 DELETE 示例。

我正在尝试这样的事情,但出现错误:

SQL 错误:ORA-00933。 00000 - “SQL 命令未正确结束”

DELETE t1
FROM T1 t1
INNER JOIN T2 t2
  ON t2.ID = t1.ID_t2
INNER JOIN T3 t3  
  ON t3.ID = t1.ID_t3
  WHERE (t3.property1 IN 'XXX' AND 
        t3.property2 = 1 AND 
        t2.property = 'YYY');

我怎样才能让它工作?

【问题讨论】:

    标签: sql oracle join sql-delete


    【解决方案1】:

    您正在使用 MySql 语法从 Oracle 数据库中删除。
    您可以使用EXISTS

    DELETE FROM T1 
    WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.property = 'YYY' AND T2.ID = T1.ID_t2)
      AND EXISTS (SELECT 1 FROM T3 WHERE T3.property1 = 'XXX' AND T3.property2 = 1 AND T3.ID = T1.ID_t3)
    

    【讨论】:

      【解决方案2】:

      这不是有效的 Oracle 语法。试试exists:

          DELETE FROM T1 
          where exists 
                     (select * from T2 where T2.ID = T1.ID_t2 and T2.property = 'YYY')
          and exists (select * from T3 where T3.ID = T1.ID_t3 and T3.property1 IN ('XXX') AND T3.property2 = 1  ) ;
      

      对于单个值,您可以使用 T3.property1 ='XXX' 而不是 T3.property1 IN ('XXX')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-16
        • 2017-05-20
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        相关资源
        最近更新 更多