【问题标题】:Convert SQL Server Delete statement to use inner join将 SQL Server 删除语句转换为使用内连接
【发布时间】:2017-09-08 09:25:04
【问题描述】:

我的目标是将以下查询转换为使用内部联接。

 DELETE ##TABLE1     
 FROM ##TABLE1 A,  ##TABLE2 B     
 WHERE A.VND_ACCT_NUM in (select distinct VND_ACCT_NUM from ##TABLE2)    

我尝试了这样的方法,但似乎不对:

 DELETE ##TABLE1     
 FROM ##TABLE1 A
 INNER JOIN ##TABLE2 B     
 ON A.VND_ACCT_NUM in (select distinct VND_ACCT_NUM from ##TABLE2)

我的任务是将第一个查询转换为使用内连接语法。

【问题讨论】:

  • 我们喜欢代码块是有原因的——它们为我们提供了语法高亮显示并防止重要的间距细节被意外删除。请把它们留在你的问题中。
  • 请小心使用全局临时表。它们通常会导致并发问题。

标签: sql sql-server inner-join sql-delete


【解决方案1】:

直接匹配表即可:

 DELETE FROM A     
 FROM ##TABLE1 A
 INNER JOIN ##TABLE2 B     
 ON A.VND_ACCT_NUM i= B.VND_ACCT_NUM

SQL Server 不介意您尝试通过此类连接多次删除同一行。此外,... IN(SELECT DISTINCT ... 无论如何都是毫无意义的,因为 IN 在找到一个符合条件的行后立即返回 true。

【讨论】:

    【解决方案2】:

    试试这个:

     DELETE A     
     FROM ##MX_DEALS A
     INNER JOIN ##MX_DAR_ISSUE_DEALS B     
     ON A.VND_ACCT_NUM in (select distinct VND_ACCT_NUM from ##MX_DAR_ISSUE_DEALS)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多