将包含子查询的 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
)
我需要在主外部查询中 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
)