gpt4 book ai didi

sql - INSERT INTO/SELECT DISTINCT 导致 SYS_GUID 的主键冲突

转载 作者:行者123 更新时间:2023-12-04 21:38:01 24 4
gpt4 key购买 nike

我在将另一个表中的数据批量插入到新表中时遇到了一些问题。目标看起来有点像这样:

CREATE TABLE TEST_T (
T_GUID RAW(16) DEFAULT SYS_GUID() NOT NULL,
T_VAL1 NUMBER(10) NOT NULL,
T_VAL2 VARCHAR2(10) NOT NULL,
PRIMARY KEY (T_GUID)
)

我打算用数据填充它的语句的简化版本:
INSERT INTO TEST_T (T_VAL1, T_VAL2)
SELECT DISTINCT
CAST(SUBSTR(zip_code, 1,1) AS NUMBER) as t_val1,
zip_code as t_val2
FROM OTHER_TABLE_T
WHERE ...
ORDER BY t_val1

因为我没有提供 T_GUID重视,我会假设我得到了一个由 SYS_GUID 提供的每个新行的函数。但是出了点问题,我得到了主键的唯一性约束违规。

如果我删除 DISTINCT ,语句成功,但我收到很多重复的条目。而且,当然,如果我明确提供 SYS_GUID()调用我的 SELECT ,结果完全相同。

现在我发现如果我简单地放另一个 SELECT在我周围,效果很好,没有违反约束,并且插入了不同的行:
INSERT INTO ...
SELECT x.* FROM (
SELECT DISTINCT ...
) x

那么重复的 guid 来自哪里?如果完整的行集没有问题,为什么通过 distinct 删除行会导致麻烦?由于 SYS_GUID 为每个调用创建一个唯一标识符,我只能想象在不同的​​情况下,它只为整个子句调用一次,这是通过周围的包装 SELECT 解决的。 .如果有人能解释在这种情况下执行有何不同,我会很高兴。

最佳答案

尝试这样的事情:

insert into test_t(t_guid, t_val1, t_val2)
select sys_guid(), t_val1, t_val2
from (select distinct to_number(substr(zip_code, 1, 1)) as t_val1, zip_code as t_val2
from other_table_t
where ...)

关于sql - INSERT INTO/SELECT DISTINCT 导致 SYS_GUID 的主键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com