Sql 将数据从一个表复制到另一个表

Sql 将数据从一个表复制到另一个表,sql,postgresql,postgresql-9.2,Sql,Postgresql,Postgresql 9.2,我通过从表中选择数据并插入到另一个表中来更新数据。但是,另一个表上有一些限制,我得到了以下结果: DETAIL: Key (entry_id)=(391) is duplicated. 我基本上是这样做的: insert into table_tmp select * from table_one 发生此密钥条目重复时,如何跳过插入 更新我无法将此架构信息保存在SQL FIDLE上,但它在这里: CREATE TABLE table1 ("entry_id" int, "text

我通过从表中选择数据并插入到另一个表中来更新数据。但是,另一个表上有一些限制,我得到了以下结果:

DETAIL:  Key (entry_id)=(391) is duplicated.
我基本上是这样做的:

insert into table_tmp 
select * from table_one
发生此密钥条目重复时,如何跳过插入

更新我无法将此架构信息保存在SQL FIDLE上,但它在这里:

CREATE TABLE table1
    ("entry_id" int, "text" varchar(255))
;

INSERT INTO table1
    ("entry_id", "text")
VALUES
    (1, 'one'),
    (2, 'two'),
    (3, 'test'),
    (3, 'test'),
    (12, 'three'),
    (13, 'four')
;



CREATE TABLE table2
    ("entry_id" int, "text" varchar(255))
;

Create unique index entry_id_idxs
on table2 (entry_id)
where text='test';

INSERT INTO table2
    ("entry_id", "text")
VALUES
    (1, 'one'),
    (2, 'two'),
    (3, 'test'),
    (3, 'test'),
    (12, 'three'),
    (13, 'four')
;
尝试构建架构时出现的错误使用此查询-:

使用此查询-:


使用返回不匹配行的联接插入:

INSERT INTO table2
SELECT DISTINCT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t2.entry_id = t1.entry_id
WHERE t2.entry_id IS NULL

使用返回不匹配行的联接插入:

INSERT INTO table2
SELECT DISTINCT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t2.entry_id = t1.entry_id
WHERE t2.entry_id IS NULL

只要在两个表中的
entry\u id
上都有一个索引,通过检查web,我相信postgres在这两种情况下的行为是相同的,那么这个查询就会快速工作。对不起,我自己不是博士后!感谢mvp的回答,我也得到了与波西米亚人查询相同的错误:
错误:重复键值违反了唯一约束“entry\u id\u idx”
@GandalfStormCrow:我不明白这怎么可能。我的SQLFiddle肯定能按预期工作——它跳过了重复的键。你确定你讲的是整个故事吗?你能提供一些不适合你的小的消毒例子吗?是的,我想我们同时写了评论,我更新了我的问题。你的小提琴正在工作,但我想我问的问题不准确,所以我现在更新了它。我无法(不知道如何)更新fiddle,因为架构未生成。谢谢只要两个表中的
entry\u id
上都有索引,该查询就会快速运行。通过检查web,我相信postgres在这两种情况下的行为是相同的。对不起,我自己不是博士后!感谢mvp的回答,我也得到了与波西米亚人查询相同的错误:
错误:重复键值违反了唯一约束“entry\u id\u idx”
@GandalfStormCrow:我不明白这怎么可能。我的SQLFiddle肯定能按预期工作——它跳过了重复的键。你确定你讲的是整个故事吗?你能提供一些不适合你的小的消毒例子吗?是的,我想我们同时写了评论,我更新了我的问题。你的小提琴正在工作,但我想我问的问题不准确,所以我现在更新了它。我无法(不知道如何)更新小提琴,因为架构没有生成。感谢波希米亚人的回答,这次我遇到了另一个错误:
错误:重复的键值违反了唯一约束“entry\u id\u idx”
我添加了
DISTINCT
关键字-看看这是否有帮助。顺便说一句,您的示例不会构建(在sqlfiddle上),因为table2是以重复开始的-您需要删除table2中id=3的插入之一。还要在表1中添加一个不同的值以使示例有意义。感谢波希米亚人的回答,这次我遇到了另一个错误:
错误:重复键值违反了唯一约束“entry\u id\u idx”
我添加了
DISTINCT
关键字-看看这是否有帮助。顺便说一句,您的示例不会构建(在sqlfiddle上),因为table2是以重复开始的-您需要删除table2中id=3的插入之一。另外,在表1中添加一个不同的值以使示例有意义。是否使用
WHERE
约束创建唯一索引?为什么?这没有任何意义。请从索引创建中删除
WHERE
。是否使用
WHERE
约束创建唯一索引?为什么?这没有任何意义。请从索引创建中删除
WHERE