我有一个表t1
和表t2
。如表t1
中那样,主要约束将处于禁用状态。主要约束在列C1,C2
上,而表t2
没有任何约束。
当我尝试在表PK_test
中启用主要约束t1
时,如果有任何异常(记录违反约束)将保存在表t2
中。表t1
将列c1,c2
如下所示。
C1 C2 ROWID
1 2 ABCD
1 2 ABCE
1 2 ABCF
7 8 ABCI
表格t2
将包含带有数据
ROWID
ROWID
ABCD
ABCE
ABCF
因为只有这些行违反PK
所以我想只保留表min(ROWID)
中的t2
作为列C1,C2
。
所以我写了一个查询
delete *
from t2
where ROWID not in(select min(ROWID)
from t1
where ROWID in (select ROWID
from t2)
group by C1,C2);
但是上面的查询也写了NULL select min(rowed)..
查询正确返回1 ROWS(ABCD)
。
请帮助找出这里到底出了什么问题。
答案 0 :(得分:1)
我会把它写成:
delete t2
where t2."RowId" not in (select min(t1."RowId")
from t1
group by c1, c2
);
答案 1 :(得分:0)
这里我试图删除任何大于min(ROWID)的t2.ROWID,这个t1具有相同的C1和C2
delete t2
where t2."ROWID" > (select min(a."ROWID")
from t1 join t1 a on t1.c1 = a.c1 and t1.c2 = a.c2
where t1."ROWID" = t2."ROWID");