如果不存在,则从MAPPING表中插入行

时间:2016-01-16 15:59:41

标签: sql-server

我有这两张桌子:

Table P

A  | B    
---------
X  | 2  
X  | 7  
X  | 10 
X  | 28
Y  | 24

Mapping M

C   | D
-----------
7   | 2136
28  | 786
24  | 4212
124 | 5311
935 | 6012

如果我能找到表P中B列的匹配值和映射M的C列中的值,我还需要将D列的值添加到表P中。

例如,表P的X和2的第1条记录,我在映射M的C列中找不到2,所以不会添加任何内容。

第二个记录X和7,我可以在C栏中找到7,所以我要将X和2136添加到表P中。

因此被添加到表P中:

X  | 2136
X  | 786
Y  | 4212

我发现插入这3行很有挑战性。

我可以这样做:

SELECT P.*, M.D FROM @TableP P
    JOIN @MappingTable M ON (P.B = M.C)

并将结果放入TEMP表和INSERT中,但如何在1 INSERT语句中执行此操作?

1 个答案:

答案 0 :(得分:1)

我刚刚意识到这很简单:

INSERT INTO @TableP
SELECT P.A, M.D FROM @TableP P
    JOIN @MappingTable M ON (P.B = M.C)