Oracle 11g 从另一个具有重复项的表插入

凯文·罗梅罗

好的,我有 2 个新表:客户和合同。我将专注于第一个,因为它们具有相同的结构。客户端看起来像:

+-----------+---------+
| client_id |  name   |
+-----------+---------+
| Value 1   | Value 2 |
+-----------+---------+

并像这样创建:

CREATE TABLE Client (
  client_id varchar2(15)  NOT NULL,
  name varchar2(100)  NOT NULL,
  CONSTRAINT Client_pk PRIMARY KEY (client_id)
) ;

我还有一张旧桌子:old_contracts看起来像:

+------------+----------+------+
| contractid | clientid | name |
+------------+----------+------+
| con1       | cli1     | n1   |
| con2       | cli2     | n2   |
| con3       | cli2     | n2   |
| con4       | cli3     | n3   |
| con5       | cli3     | n3   |
+------------+----------+------+

定义:

CREATE TABLE old_contracts(
  contractid varchar2(15)  NOT NULL
  clientid varchar2(15)  NOT NULL,
  name varchar2(100)  NOT NULL
) ;

我想从 old_contract 中获取数据并将其插入客户端。


这个 old_contracts 表的行有重复的 clientid(一个客户可以有多个合同),但我不想在 Client 表上有重复,所以我这样做:

INSERT INTO Client (
  client_id,
  name
) SELECT DISTINCT
  clientid,
  name
FROM old_contracts;

避免重复。无论如何,我收到此错误:

错误 SQL:ORA-00001:违反了唯一约束 (USER.CLIENT_PK)

00001.00000 - “违反了唯一约束(%s.%s)”

这是怎么回事?我相信DISTINCT关键字会做这件事。


我还尝试按照相关帖子(即这个)中的建议添加WHERE NOT EXISTS子句,但我得到的结果是相同的错误。

埃里希·基茨穆勒(Erich Kitzmueller)

最有可能的是,对于给定的 clientid,名称并不总是相同的。

试试这个:

INSERT INTO Client (
 client_id,
  name
) SELECT clientid,
  max(name)
FROM old_contracts
GROUP BY clientid;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章