【问题标题】:SQL: Inner or Outer Join to delete rows from databases?SQL:从数据库中删除行的内连接或外连接?
【发布时间】:2016-02-11 12:46:52
【问题描述】:

我有 2 张桌子:

产品:

ID | Price | Status |

订单:

Location | Product ID |

产品 ID 是 ORDER 表中的外键。

我想从 两个 表中删除与具有特定状态(例如活动)的产品相关的行。

我应该使用什么JOIN 操作来执行此操作?

请注意,Product 表中的行数比 Order 表中的行数多。

【问题讨论】:

    标签: mysql inner-join outer-join


    【解决方案1】:

    如果您打算删除 Product 表中的记录,则应删除 Order 表中的所有相关记录。所以您的查询将如下所示:

    DELETE p
    FROM Product p
    INNER JOIN Order o
      ON o.ProductId=p.Id
    Where p.Status='Active'
    

    【讨论】:

    • 谢谢,为什么这比外连接更有效?
    • 内连接只会返回基于连接谓词匹配的行。在这种情况下,这意味着只要 Product 和 Order 表共享一个 Product ID,就会在结果中生成一行来显示匹配。但是,使用左外连接或右外连接,结果集将保留左表或右表中的所有行。这意味着您将尝试删除具有不必删除的空值的行,这将花费更多时间。
    【解决方案2】:

    inner join,你想要的,只有inner join

    编辑:

    【讨论】:

    • 将此作为评论而不是回答
    • 为什么它只是一个内连接?谢谢
    • 简单,....您以提问的方式得到答案。您问“我应该使用什么 JOIN 操作来执行此操作?”我给了你一个答案。如果你想让别人给你代码,那就说出来,但你问的这个问题是基本 SQL 教程所涵盖的。这个网站是用来解决问题的,不是用来教人教程的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多