2017-05-05 50 views
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 

它复制该GF-2两次在块2

注:ID列自动加1。

+0

你确定在block或flats列中没有前导或尾随空格吗? –

+0

@vkp不,没有。当我刚刚运行时,从t1中选择了不同的Block,Flats,它给出了完全相同的输出,我希望没有重复。 – Bilal

+0

桌子上是否有触发器? – HLGEM

回答

2

可以使用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; 

注:这是假定ididentity列(这是我看你有没有描述为案件)。

+0

很抱歉作为新手。这是样本。在实际情况下会输入2列。在这个查询案例中他们会发生什么?因为我似乎无法弄清楚他们会从哪个选择中获得他们的输出。 – Bilal

相关问题