需要帮助将TSQL UNION转换为JOIN

时间:2017-11-22 23:18:42

标签: sql-server tsql join union

长话短说,我在NAV工作,它有一个查询对象,但那些不支持UNION。在SQL中,我将通过UNION解决我的问题。是否有一个JOIN可以得到与此相同的结果?

SELECT ID
      ,'' as 'Location ID'
      ,[Acc ID]
  FROM [dbo].[CRONUS Canada, Inc_$TestCarr]
UNION
SELECT [ID]
      ,[Location ID]
      ,[Acc ID]
  FROM [dbo].[CRONUS Canada, Inc_$TestCarrAcc]
ORDER BY [ID], [Location ID]

TestCarrAcc的PKey为[ID,位置ID],TestCarr只有[ID]。这是因为TestCarrAcc需要支持每个ID多个。我不能改变这些表格。

基本上我试图保留TestCarr中的行,即使它们与TestCarrAcc(基于ID)匹配。那有意义吗?还有办法吗?如果没有,我有其他解决方案,他们就不会那么优雅。

2 个答案:

答案 0 :(得分:1)

您可以将UNION重写为FULL OUTER JOIN

在您的情况下如下。

SELECT DISTINCT COALESCE(tca.ID, tc.ID)AS ID,
                CASE WHEN tc.ID IS NULL 
                    THEN tca.[Location ID] 
                    ELSE '' 
                END AS [Location ID],
                COALESCE(tca.[Acc ID], tc.[Acc ID]) AS [Acc ID]
FROM   [dbo].[CRONUS Canada, Inc_$TestCarrAcc] tca
       FULL OUTER JOIN [dbo].[CRONUS Canada, Inc_$TestCarr] tc
                    ON 1 = 0;

答案 1 :(得分:0)

将UNION放在视图定义中,然后查询VIEW。