SQL插入的唯一约束-ORACLE
Posted
技术标签:
【中文标题】SQL插入的唯一约束-ORACLE【英文标题】:Unique constraint on SQL insert -ORACLE 【发布时间】:2014-03-10 22:58:06 【问题描述】:我正在运行一个脚本,该脚本会触发一个选择查询并将结果插入到一个表中。
选择查询是
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 数据库。
【问题讨论】:
您确定您选择的child_id
不存在于TI_CAT_0
表中
distinct 对 select 的 all 列进行操作,而不仅仅是第一列。因此,child_id
的值可以相同,parent_id
的值不同,它仍然是不同的。
@a_horse_with_no_name 那么我们有什么办法可以拥有不同的子 ID?
【参考方案1】:
假设您从头开始创建 TI_CAT_0
表并从您的 SELECT
查询中插入记录,那么您要么无意中多次插入同一记录,要么您的初始查询为每个 child_id
返回多行.如果是这种情况,您应该运行此查询以查看您的初始查询是否返回重复的 child_id
值。编写的查询将返回child_id
和parent_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
结果(如果有)将是与多个 parent_id
值关联的所有 child_id
值。
【讨论】:
以上是关于SQL插入的唯一约束-ORACLE的主要内容,如果未能解决你的问题,请参考以下文章
oracle 禁用唯一性约束该如何写语句? 我的表名是OEM_REPOSITORY