我有两张桌子,
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语句执行此操作?我需要避免任何类型的循环。
答案 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的记录值,否则您必须使用TOP
或LIMIT
(无论支持的是什么)你的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