根据另一个表中的值更新表中的字段

时间:2015-11-09 06:59:33

标签: sql select field

我有一张桌子 - 姓名:薪水:

   Code SM SM_Desc
    4    23  NULL 
    4    12  NULL
    5    11  NULL
    5    12  NULL
    6    44  NULL
    6    15  NULL
    .
    .
    .
    27   99  NULL
    32   CK4 BLABLA
    33   242 BLABLA
    34   64 BLABLA

另一张表 - ListSM:

SM SM_Desc 
1   Bla1
2   Bla2
3   bla3
4   bla4
.
.
. 
99  bla5 
. 
.
64  bla6

我想根据ListSM表中的字段SM更新薪水表中的字段SM_Desc,但仅限于4到27之间的代码值(包括在内)。

含义:  我不希望工资表中的值BLABLA将被值'bla6'覆盖。我不会在薪资表中为代码值32,33,34更改任何内容。 如果ListSm不包含薪水表中的值 - 请将其保留为NULL。

我到目前为止写道:

UPDATE dbo.Salary
   SET Salary.SM_Desc = ListSM.SM_Desc
   FROM ListSM INNER JOIN  ListSM ON Salary.SM = ListSM.SM
where salary.code is between 4 and 27

那会有用吗?还有其他建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您必须再次包含目标表名称作为FROM子句中的第一个表:

UPDATE dbo.Salary SET
    Salary.SM_Desc = ListSM.SM_Desc
FROM
    dbo.Salary
INNER JOIN
    ListSM
ON
    Salary.SM = ListSM.SM
WHERE
    Salary.Code IS BETWEEN 4 AND 27;

如果您只想更新Salary表中的现有代码是否在4到27之间(如上所述),那么我不会100%清楚 - 如果您只想更新if ListSM表中存在4到27之间的代码。如果它是后者,那么只需在最后的WHERE子句中更改表名。