Sql 在同一个表中插入唯一值
我有一个表,我想用新日期插入旧值,但只插入唯一的值Sql 在同一个表中插入唯一值,sql,sql-server,Sql,Sql Server,我有一个表,我想用新日期插入旧值,但只插入唯一的值 t1 ID | Block | Flats | 1 | 1 | GF-1 | 2 | 1 | GF-2 | 3 | 2 | GF-1 | 4 | 2 | GF-2 | 5 | 2 | GF-2
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
它在block 2中复制GF-2两次
注意:ID列自动递增1。您可以使用交叉连接生成所有行,然后删除已经存在的行:
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
列(我看您已经描述了这种情况)。您确定block或flats列中没有前导空格或尾随空格吗?@vkp没有。当我刚刚运行select distinct Block时,从t1开始,它会给出完全相同的输出,没有重复。表上有触发器吗?@HLGEM没有,没有触发器。抱歉,我是个新手。这是一个样本。在实际场景中输入了另外两列。在这种查询情况下,它们会发生什么?因为我似乎无法确定他们将从哪个选择中获得输出。