【问题标题】:Join based on temp column基于临时列加入
【发布时间】:2018-01-24 17:59:28
【问题描述】:

我有两个表需要连接,但唯一相似的列有多余的数据需要剥离。我只会修改表格,但我只有对它们的读取权限。因此,我从表格中删除了不需要的文本并添加了一个临时列,但我无法加入它。我得到了错误:

无效的列名“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

【问题讨论】:

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

标签: sql sql-server-2008 join temp


【解决方案1】:

最简单的方法是将其包装在 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;

【讨论】:

  • 我将在@ZoharPeled 中添加这一点,因为 Aaron 的帖子让我了解到他们有多邪恶。
  • 加 1 用于推动 NOLOCK 关注
  • 感谢@JohnCappelletti,有趣的是我有一个非常大的 HIS,它像炸薯条上的盐一样使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多