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没有,没有触发器。抱歉,我是个新手。这是一个样本。在实际场景中输入了另外两列。在这种查询情况下,它们会发生什么?因为我似乎无法确定他们将从哪个选择中获得输出。