2017-10-03 2 views
2

J'ai deux tables et j'utilise une simple condition de jointure entre elles.Comment mettre à jour une colonne avec une valeur différente en utilisant une simple instruction Join?

J'ai besoin de trouver les valeurs communes et mis à jour le String (Success) dans la colonne.

input_table1:

ID || Name || output 
1 || ABS || Null 
2 || ADF || NULL 
3 || AQS || Null 
4 || ATF || NULL 
5 || APS || Null 
6 || AMF || NULL 

Input_table2:

ID || Name 
1 || ABS  
2 || ADF 
6 || AMF  

output_table: Ceci est la sortie que j'ai besoin.

ID || Name || output 
1 || ABS || Success 
2 || ADF || Success 
3 || AQS || Null 
4 || ATF || NULL 
5 || APS || Null 
6 || AMF || Success. 

C'est la requête que je utilise et ceci est l'erreur est reçois Une expression de type non spécifié booléen dans un contexte où une condition devrait, près « Alors ».

update .[dbo].[InputTable1] 
set Output= 
case when (
select INT.ID 
from [dbo].[input_table1] INT 
join [dbo].[input_table2] SHB 
on INT.ID=SHB.ID 
) Then 'Success' Else Null End 
+0

Bonne question, aussi essayez de créer un exemple DML, DDL comme ci-dessous pour aller de l'avant .. »Créer un tableau # t1 ( id int, Namee char (4), SORT char (4) ) insertion dans # t1 sélectionner 1, 'ABS', union Null tous sélectionner 2, 'ADF', NULL \t union all' – TheGameiswar

Répondre

5

votre requête doit être simplement

update INT 
set Output= 'Success' 
FROM 
[dbo].[input_table1] INT 
join [dbo].[input_table2] SHB 
on INT.ID=SHB.ID 

See working demo

3

...CASE WHEN <condition> = <value> THEN....

Il vous manque <value> je soupçonne que vous avez besoin après IS NOT NULL votre requête.

Cela dit, ce n'est pas efficace. DhruvJoshi est mieux

1

Je voudrais utiliser EXISTS et FROM derrière UPDATE pour cette

UPDATE it 
SET Output = (CASE WHEN exists(
     SELECT 1 
     FROM [dbo].[input_table2] SHB 
     WHERE it.ID=SHB.ID) 
    THEN 'Success' ELSE Null END) 
FROM [dbo].[InputTable1] it 
1

Vous pouvez juste essayer ceci:

UPDATE 
    InputTable1 
SET 
    Output='Success' 
FROM 
    InputTable1 
    JOIN InputTable2 ON 
     InputTable1.ID=InputTable2.ID 

Seules les lignes jointes seront mises à jour