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

时间:2016-03-01 09:28:45

标签: sql-server database tsql join subquery

我需要从主外部查询中的Application表中选择一个列,这意味着我必须重写以下查询以使用连接而不是子查询,以便将Application表移动到主外部查询的范围内。

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

有没有人建议如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这样的事情:

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

这将从Application表中选择所有。

答案 1 :(得分:1)

如果我们不包含表中的结果集,我们最好将它放在where存在的部分中,而不是包含在连接中。

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
)