具有多个INNER JOIN的SQL更新

时间:2012-03-08 17:10:09

标签: sql sql-server join sql-server-2008-r2

我有两张桌子,

SELECT [SHADOW_ID]
      ,[DATA]
      ,[TSN]
      ,[HEALTH_PLAN_CATEGORY_VALUE_ID]
FROM [stbl834]

SELECT [HEALTH_PLAN_CATEGORY_VALUE_ID]
      ,[TSN]
FROM [uvwCLIENT_HEALTH_PLAN]

现在,在stbl834中,HEALTH_PLAN_CATEGORY_VALUE_ID都设置为NULL,我需要根据stbl834的不同TSN值从uvwCLIENT_HEALTH_PLAN获取这些值。有没有办法使用JOIN语句执行此操作?我需要避免任何类型的循环。

4 个答案:

答案 0 :(得分:2)

首先运行一个选择

SELECT * 
FROM [stbl834] A
INNER JOIN [uvwCLIENT_HEALTH_PLAN] B ON A.TSN = B.TSN

并验证您的行数是否正确,以及列中的值是否匹配。这样可以确保您拥有正确的连接键。如果这看起来正确,请使用以下更新

UPDATE [stbl834]
SET [HEALTH_PLAN_CATEGORY_VALUE_ID] = B.[HEALTH_PLAN_CATEGORY_VALUE_ID]
FROM [stbl834] A
INNER JOIN [uvwCLIENT_HEALTH_PLAN] B ON A.TSN = B.TSN

答案 1 :(得分:1)

Select HEALTH_PLAN_CATEGORY_VALUE_ID, TSN
from stbl834 left join uvwCLIENT_HEALTH_PLAN
on stbl834.TSN=uvwCLIENT_HEALTH_PLAN.TSN

您需要将它们插入stbl834吗?如果是的话 -

update stbl834
set HEALTH_PLAN_CATEGORY_VALUE_ID = uvwCLIENT_HEALTH_PLAN.HEALTH_PLAN_CATEGORY_VALUE_ID
from stbl834 left join uvwCLIENT_HEALTH_PLAN
on stbl834.TSN=uvwCLIENT_HEALTH_PLAN.TSN

答案 2 :(得分:1)

或者,您可以对任何不支持UPDATE..FROM语法的RDBMS执行此操作:

UPDATE stbl834 
SET    health_plan_category_value_id = (SELECT health_plan_category_value_id 
                                        FROM   uvwclient_health_plan 
                                        WHERE uvwclient_health_plan.tns = stbl834.tns) 

此解决方案与SQL Ansi兼容,这意味着它适用于任何 RDBMS。请确保子查询(SELECT)仅返回给定TNS的记录值,否则您必须使用TOPLIMIT(无论支持的是什么)你的RDBMS。)

答案 3 :(得分:0)

您也可以尝试这一点,这可能符合您的目的。

update  stbl834
set stbl834.HEALTH_PLAN_CATEGORY_VALUE_ID= uvwCLIENT_HEALTH_PLAN.HEALTH_PLAN_CATEGORY_VALUE_ID
inner join uvwCLIENT_HEALTH_PLAN.TSN=HEALTH_PLAN_CATEGORY_VALUE_ID.TSN