2017-08-16 4 views
2

J'ai deux tables qui doivent être jointes, mais la seule colonne similaire contient des données en excès qui doivent être supprimées. Je voudrais juste modifier les tables, mais je n'ai accès qu'en lecture. Donc, je dépouille le texte inutile de la table et ajoute une colonne de temp, mais je ne peux pas me joindre à lui. Je reçois l'erreur:Rejoindre en fonction de la colonne temp

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

Vous ne devriez pas faire cela. Avoir externe sélectionner et ensuite essayer d'avoir joint. Ou utilisateur CTE. – Prathyush

Répondre

6

façon serait plus facile d'envelopper cela dans un CTE. En outre, be careful using NOLOCK, sauf si vous avez une raison explicite.

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

J'ajouterais ce lien: https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+0

J'ajouterai que dans @ZoharPeled comme le post d'Aaron était où j'ai appris à quel point ils pouvaient être mauvais. – scsimon

+0

Ça a marché, merci! – dbreienrk1