想象一下,我在sql server 2012中有一个这样的表
Id | type | binary
1 1 FFX09
1 2 HY6Z0
2 1 TY67D
2 2 RTY7S
3 1 3YDH8
3 2 383JD
3 3 4HED8
我想要做的是为每个没有相应类型3的id插入一个新行。它将添加相同的id,type = 3,binary将从类型2行中获取值那个id。
我可以在循环中进行,但想知道是否有基于集合的方法来执行此操作?
由于
答案 0 :(得分:1)
这是insert select
语句的经典用例:
INSERT INTO my_table
SELECT id, 3, binary
FROM my_table t_outer
WHERE type = 2 AND NOT EXISTS (SELECT *
FROM my_table t_inner
WHERE type = 3 AND t_inner.id = t_outer.id)
答案 1 :(得分:0)
怎么样:
INSERT INTO mytable
SELECT DISTINCT id, 3, (SELECT binary FROM mytable mt2 WHERE mt.id=mt2.id AND type=2)
FROM mytable mt
WHERE id NOT IN (SELECT id FROM mytable WHERE type = 3)