标签: upsert

如果记录存在,则更新其他插入

我正在尝试在两个SQL Server 2008表之间移动一些数据.如果Table2中的记录与Table1中的电子邮件一起存在,则使用Table1中的数据更新该记录,否则插入新记录.

在表1中,我有许多列; 名字,姓氏,电子邮件等.

如果Table1中的电子邮件存在,我不太确定如何构造查询来更新Table2,如果表2中不存在Table1的电子邮件,我不会插入新行.

我尝试在Google上进行一些搜索,但大多数解决方案似乎都是通过创建一些存储过程来实现的.所以我想知道是否有人可能知道如何构建一个可能做到这一点的合适查询?

sql sql-server merge upsert sql-server-2008

10
推荐指数
2
解决办法
1万
查看次数

在Sybase ASE中进行升级(更新或插入)?

我正在编写一个应用程序来将数据从Oracle移动到Sybase,并且需要执行更新/插入操作.在Oracle中,我使用MERGE INTO,但它似乎在Sybase中不可用(无论如何都不在ASE中).我知道这可以用多个语句完成,但由于几个原因,我真的想把它变成一个语句.

有什么建议?

sql upsert sybase-ase

10
推荐指数
4
解决办法
1万
查看次数

使用PostgreSQL 9.3在CTE UPSERT中生成DEFAULT值

我发现使用可写CTE模拟PostgreSQL中的upsert是一个非常优雅的解决方案,直到我们在Postgres中获得实际的upsert/merge.(见:https://stackoverflow.com/a/8702291/558819)

但是,有一个问题:如何插入默认值?NULL当然,使用将无助于NULL显式插入NULL,与MySQL不同.一个例子:

WITH new_values (id, playlist, item, group_name, duration, sort, legacy) AS (
    VALUES (651, 21, 30012, 'a', 30, 1, FALSE)
    ,      (NULL::int, 21, 1, 'b', 34, 2, NULL::boolean)
    ,      (668, 21, 30012, 'c', 30, 3, FALSE)
    ,      (7428, 21, 23068, 'd', 0, 4, FALSE)
), upsert AS (
    UPDATE playlist_items m
    SET    (playlist, item, group_name, duration, sort, legacy)
       = (nv.playlist, nv.item, nv.group_name, nv.duration, nv.sort, nv.legacy)
    FROM   new_values nv
    WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql merge upsert sql-insert

10
推荐指数
1
解决办法
1787
查看次数

SnowFlake MERGE 更新/插入所有列

雪花是否支持使用类似UPDATE *or的语法更新/插入所有列INSERT *

 MERGE INTO events 
 USING updates 
      ON events.eventId = updates.eventId
 WHEN MATCHED THEN 
      UPDATE *
 WHEN NOT MATCHED THEN 
       INSERT *  
Run Code Online (Sandbox Code Playgroud)

类似于 Databricks 的做法:https ://docs.databricks.com/spark/latest/spark-sql/language-manual/delta-merge-into.html

或者我们是否必须列出每一列及其值?

当我尝试上述操作时出现错误

语法错误...意外的“*”。

并且文档没有多大帮助:https://docs.snowflake.com/en/sql-reference/sql/merge.html

谢谢,

sql merge upsert snowflake-cloud-data-platform

10
推荐指数
1
解决办法
6602
查看次数

如何使用python在postgres中获取插入或选择的行ID

我的postgres查询是:

query = """INSERT INTO statustable(value) SELECT '%s' 
                WHERE NOT EXISTS (SELECT id, value FROM statustable
                WHERE value = '%s') RETURNING id""" %  (status, status)
    cursor_postgres.execute(query)
    conn_postgres.commit()
    statusId = cursor_postgres.fetchone()[0]
    print "statusId" + str(statusId)
Run Code Online (Sandbox Code Playgroud)

如果它不存在,我需要获取新插入的状态值id,或者如果已存在则选择其id.RETURNING id完全扼杀了这个查询所以我不得不删除它至少得到选择性插入工作.

有关如何获取statusId的任何线索?在另一个例子中,我正在做一个Upsert.(如果不存在则插入,否则更新)这里再次,我需要插入或更新的行id.(不,我没有使用存储过程,如果那是你的第一个问题...)

提前致谢

python postgresql upsert

9
推荐指数
1
解决办法
7034
查看次数

在MongoDB文档中匹配符合条件的数组元素?

根据如何在MongoDB文档中更新匹配条件的数组元素?

我想要插入数组元素,所以如果一个不匹配然后插入它,否则更新它.

我尝试了这个问题的答案,如果数组元素已经存在,它可以正常工作.如果元素不存在,那么它会在数组字段下创建一个子元素"$".

我的Mongo结构如下:

Widget (collection)
--Name
--Properties (array)
  --Name
  --Value
Run Code Online (Sandbox Code Playgroud)

我的应用程序从WebService调用获取Widget Name和Properties列表.我希望迭代提供的属性并在Name已经存在时更新MongoDB中的值,或者如果不存在则将新属性插入Properties数组.

arrays upsert mongodb

9
推荐指数
1
解决办法
5892
查看次数

Mongodb upsert抛出DuplicateKeyException

当我尝试使用方法[1]插入(增加或插入)文档时,我不时会收到此错误[2].

[1]

public NGram save(final NGram ngram) {
    Criteria cr = where("_id").is(ngram.getNgram())
            .and("f3c").is(ngram.getF3c())
            .and("tokCount").is(ngram.getTokCount())
            .and("first").is(ngram.getFirst())
            ;
    if( ngram.getTokCount() > 1 ) {
        cr.and("second").is(ngram.getSecond());
    }
    if( ngram.getTokCount() > 2 ) {
        cr.and("third").is(ngram.getThird());
    }
    final Query qry = new Query( cr );
    final Update updt = new Update().inc("count", ngram.getCount());
    template.upsert(qry, updt, NGram.class);
    return ngram;
}
Run Code Online (Sandbox Code Playgroud)

[2]

Caused by: org.springframework.dao.DuplicateKeyException: E11000 duplicate key error index: sytrue.ngram.$_id_  dup key: { : "page two" }; nested exception is com.mongodb.MongoException$DuplicateKey: E11000 duplicate key error index: sytrue.ngram.$_id_ …
Run Code Online (Sandbox Code Playgroud)

spring upsert mongodb

9
推荐指数
1
解决办法
8082
查看次数

如何在Postgres中插入2列中的一列冲突?

upsert当表格中的2列中的一列发生冲突时,是否可以在Postgres 9.5中执行此操作.基本上我有2列,如果任何列抛出唯一约束违规,那么我想执行更新操作.

postgresql upsert postgresql-9.5

9
推荐指数
1
解决办法
3193
查看次数

INSERT [...] ON CONFLICT可用于外键违规吗?

特定

=> select * from referenced;
 referenced_id | name  
---------------+-------
             1 | one
             2 | two
             3 | three
Run Code Online (Sandbox Code Playgroud)

=> select * from entries;
 entry_id | referenced_id |      name      
----------+---------------+------------------
        1 |             3 | references three
Run Code Online (Sandbox Code Playgroud)

在哪里referenced_identry_id是主键.

entries如果entry_id已经存在或引用的项不存在,我想要一个insert语句来跳过该插入.第一个很容易做到:

INSERT INTO entries
VALUES (1, 2, 'references two')
ON CONFLICT (entry_id) DO NOTHING;
Run Code Online (Sandbox Code Playgroud)

是否有可能在这里检查是否存在外键?

sql postgresql upsert sql-insert postgresql-9.5

9
推荐指数
1
解决办法
3213
查看次数

如何用INSERT更新所有列... ON CONFLICT ...?

我有一个包含单个主键的表.当我尝试插入时,尝试插入具有现有密钥的行可能会导致冲突.我想允许插入更新所有列?这有什么简单的语法吗?我试图让它"upsert"所有列.

我正在使用PostgreSQL 9.5.5.

sql database postgresql insert upsert

9
推荐指数
1
解决办法
6210
查看次数