将包含子查询的 T-SQL 查询重写为使用连接

Rewrite a T-SQL query containing subqueries to using joins

我需要在主外部查询中 select 来自应用程序 table 的一列,这意味着我必须重写以下查询以使用连接而不是子查询来移动应用程序table进入主外部查询的范围。

SELECT XMLValue
FROM DynamicField
WHERE ParentID IN (
   SELECT DynamicFieldID
   FROM DynamicField
   WHERE ParentID IN (
      SELECT DynamicFieldID
      FROM Application
      )
   )

有人对如何解决这个问题有什么建议吗?

所以像这样:

SELECT s.*
FROM DynamicField t
INNER JOIN DynamicField t1 on(t.parentID = t1.DynamicFieldID)
INNER JOIN Application s ON(t1.parentID = s.DynamicFieldID)

这将 select 全部来自应用程序 table。

如果我们不包含来自 table 的结果集,我们最好将其放在 where exists 部分而不是包含在连接中。

SELECT XMLValue, app.[your application column name]
FROM DynamicField mainouter
join application app on exists(
    select 1  from  DynamicField appfriend
    where app.DynamicFieldID = appfriend.ParentID
    and appfriend..DynamicFieldID = mainouter.parentID
    )