【问题标题】:TSQL Rewrite UNION into JOINSQL 将 UNION 重写为 JOIN
【发布时间】:2015-07-16 15:50:35
【问题描述】:

我是 SQL 新手,我正在尝试重写此查询,以便它使用联接而不是联合

DECLARE @user VARCHAR(255) = 'jSmith'
DECLARE @dept VARCHAR(255) = 'produce'

SELECT DISTINCT A.*
FROM goals A
INNER JOIN managers B ON B.name = @user
WHERE @user IN (A.userName,A.managerUserName)
AND dept = @dept
AND yr = '2016'
UNION   
SELECT DISTINCT A.*
FROM goals A
INNER JOIN managers C ON C.name = @user
INNER JOIN committedGoals B ON A.goalID = B.goalID
WHERE dept LIKE @dept + '%'
AND yr = '2016' 

【问题讨论】:

  • 为什么要将其更改为联接?
  • 目标是将其存储在视图中,因为我目前正在将这个查询写入字符串。我想完成这样的事情:SELECT * FROM myView WHERE @user IN (A.userName,A.managerUserName) AND dept = @dept AND yr = '2016'

标签: sql-server tsql join union


【解决方案1】:

这并不完全相同,因为您已将查询的第二部分限制为包含 commitGoals 中记录的记录,但如果您始终有记录,那么这可能对您有用:

SELECT g.*
FROM goals g
LEFT JOIN managers m
  ON g.managerUserName=m.name
WHERE dept LIKE @dept + '%'
AND yr='2016'
AND (g.managerUserName=@user OR m.name=@user)

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2021-02-24
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多