我有一张桌子,我想插入带有新日期的旧值,但只插入唯一的值。
t1
ID | Block | Flats |
1 | 1 | GF-1 |
2 | 1 | GF-2 |
3 | 2 | GF-1 |
4 | 2 | GF-2 |
5 | 2 | GF-2 |
这是我的表的一部分,有一些示例数据,我希望它在复制后成为
ID | Block | Flats |
1 | 1 | GF-1 |
2 | 1 | GF-2 |
3 | 2 | GF-1 |
4 | 2 | GF-2 |
5 | 2 | GF-2 |
6 | 1 | GF-1 |
7 | 1 | GF-2 |
8 | 2 | GF-1 |
9 | 2 | GF-2 |
复制后,它仅复制了不同的值,而GF-2仅复制了一次。但是当我尝试
insert into t1 (ID,Block,Flats) select distinct Block,Flats from t1
它在块2中两次复制该GF-2。
注意:ID列自动增加1。
您可以使用生成所有行cross join
,然后淘汰已经存在的行:
insert into t1(block, flats)
select b.block, f.flats
from (select distinct block from t1) b cross join
(select distinct flats from t1) f left join
t1
on t1.block = b.block and t1.flats = f.flats
where t1.block is null;
注意:假设这id
是一identity
列(据我所知,您已经将其描述为实际情况)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句