一次从多个表中查找数据

时间:2014-08-19 16:23:26

标签: sql-server

我有四张桌子。 R(r_key,r_id) T(t_key,t_id) RT(r_key,t_key,isA,_co,_cb) 和 RT_Imp(r_id,t_id,isA,_co,_cb)。

我需要将数据从RT_Imp复制到RT。我只需要为R中已存在的r_id复制数据。如果R中没有r_id,则不应复制它的数据。

复制时我需要从R和T获取r_key和t_key,分别与r_id和t_id匹配。

我试过了

INSERT INTO RT
SELECT R.R_key, T.T_key, RT_Imp.isA, RT_Imp._co, RT_Imp._cb
FROM R, T, RT_Imp
WHERE EXISTS
(
SELECT *  
FROM R, T, RT_Imp
WHERE R.R_id = RT_Imp.R_id
and T.T_id = RT_Imp.T_id
and RT_Imp.R_id = R.R_id
)

但它给了我所有的行重复。 执行此操作应该是我的查询?

1 个答案:

答案 0 :(得分:0)

INSERT INTO rt
SELECT 
    rkey.r_key,
    tkey.t_key,
    new.isA,
    new._co,
    new._cb
FROM @RT_Imp new
INNER JOIN @R rkey
    ON rkey.r_id = new.r_id
INNER JOIN @T tkey
    ON tkey.t_id = new.t_id
LEFT JOIN @RT old
    ON old.r_key = rkey.r_key
WHERE old.r_key IS NULL

加入所有表,这将插入基于r_key在rt中找不到的所有rt_imp记录。在更新之前,您应首先使用select语句查看所有数据。