2017-08-16 67 views
2

我有两个需要连接的表,但唯一的类似列有需要剥离的多余数据。我只是修改表格,但我只能读取它们。所以,我将不需要的文本从表格中删除并添加一个临时列,但我无法加入它。我得到的错误:基于临时列加入

Invalid column name 'TempJoin'

SELECT 
    CASE WHEN CHARINDEX('- ExtraText',a.Column1)>0 THEN LEFT(a.Column1, (CHARINDEX('- ExtraText', a.Column1))-1) 
     WHEN CHARINDEX('- ExtraText',a.Column1)=0 THEN a.Column1 
    END AS TempJoin 
    ,a.Column1 
    ,b.Column2 
FROM Table1 as a 
LEFT JOIN Table2 as b WITH(NOLOCK) ON b.Column2=TempJoin 
+0

你不应该那样做。有外部选择,然后尝试加入。或用户CTE。 – Prathyush

回答

6

最简单的方法是在一个CTE来包装这个。另外,be careful using NOLOCK,除非你有明确的理由。

WITH cte AS (
    SELECT 
     CASE WHEN CHARINDEX('- ExtraText',a.Column1) > 0 
      THEN LEFT(a.Column1, (CHARINDEX('- ExtraText', a.Column1))-1) 
      WHEN CHARINDEX('- ExtraText',a.Column1) = 0 
      THEN a.Column1 
     END AS TempJoin, 
     a.Column1 
    FROM Table1 AS a 
) 

SELECT * 
FROM cte 
LEFT JOIN Table2 AS b WITH(NOLOCK) ON b.Column2 = TempJoin; 
+0

我会添加这个链接:https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+0

我会在@ZoharPal中添加它,因为Aaron的帖子是我学习的地方,他们可能有多邪恶。 – scsimon

+0

工作,谢谢! – dbreienrk1