SQL插入-ORACLE的唯一约束

时间:2014-03-10 22:58:07

标签: sql oracle

我正在运行一个脚本,该脚本将触发一个选择查询并将结果插入表中。

选择查询

select distinct a.child child_id, a.parent parent_id from cat a, par b WHERE a.child=b.catentid and b.catenttype_id='Product' and a.reltype_id='PRODUCT_ITEM'

并插入到创建为

的表中
create table TI_CAT_0 ( child_id NUMBER not null,parent_id NUMBER not null,PRIMARY KEY (child_id))

但是当我将脚本作为“SYS_C00187123”运行时,我得到一个唯一的键约束违规,我在all_constraints表中检查了这个约束名,只在TI_CAT_0表中检查了它。

由于我使用了distinct命令,我不确定为什么会出现这种违规行为。它是一个Oracle DB。

1 个答案:

答案 0 :(得分:1)

假设您从头开始创建TI_CAT_0表并从SELECT查询中插入记录,那么您无意中多次插入同一记录,或者您的初始查询返回多行每个child_id。如果是这种情况,则应运行此查询以查看初始查询是否返回重复的child_id值。您的查询在撰写时将返回child_idparent_id的唯一组合。您可以使用以下SQL检查多个父项是否与单个子项相关联:

select 
    a.child, 
    count(a.parent) as parent_count
from 
    cat a
    join par b 
        on a.child = b.catentid 
where 
    b.catenttype_id='Product' 
    and a.reltype_id='PRODUCT_ITEM'
group by 
    a.child
having
    count(a.parent) > 1
order by 2 desc

结果(如果有)将是与多个child_id值相关联的所有parent_id值。