标签: upsert

在INSERT中复制主键是否在Oracle中复制?

我有一个简单的INSERT查询,当主键是重复时我需要使用UPDATE.在MySQL中这似乎更容易,在Oracle中我似乎需要使用MERGE.

我能找到的MERGE的所有例子都有某种"源"和"目标"表,在我的例子中,源和目标是同一个表.我无法理解创建自己的查询的示例.

MERGE是唯一的方式,还是有更好的解决方案?

INSERT INTO movie_ratings
VALUES (1, 3, 5)
Run Code Online (Sandbox Code Playgroud)

它基本上是这个,主键是前2个值,所以更新将是这样的:

UPDATE movie_ratings
SET rating = 8
WHERE mid = 1 AND aid = 3
Run Code Online (Sandbox Code Playgroud)

我想过使用一个触发器,它会在调用INSERT时自动执行UPDATE语句,但前提是主键是重复的.这样做有什么问题吗?我需要一些关于触发器的帮助,因为我在尝试理解它们并做我自己时遇到了一些困难.

oracle merge insert upsert

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

如何将PostgreSQL"merge_db"(又称upsert)函数转换为MySQL

直接从手册,这是PostgreSQL中merge_db规范示例:

CREATE TABLE db (a INT PRIMARY KEY, b TEXT);

CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
$$
BEGIN
    LOOP
        -- first try to update the key
        UPDATE db SET b = data WHERE a = key;
        IF found THEN
            RETURN;
        END IF;
        -- not there, so try to insert the key
        -- if someone else inserts the same key concurrently,
        -- we could get a unique-key failure
        BEGIN
            INSERT INTO db(a,b) VALUES (key, …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql upsert

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

pymongo- upsert无法使用$ set操作执行插入

我有一个空集合,有数千个条目要处理(条目可能有减少,我想要使用更新和插入).python代码(使用pymongo)我写道:

for mydoc in alldocs:
   key = {'myid': mydoc['myid']}
   data = process_doc(mydoc)    # returns simple dictionary
   db.mydocs.update(key, {"$set": data}, upsert = True)
Run Code Online (Sandbox Code Playgroud)

以下代码无法执行任何插入操作.该系列仍然是空的.但是,当我删除$ set并使用简单的数据时,它工作正常.我不能在upsert中使用$ set吗?我想要$ set的原因是BSON的预先存在的字段不会受到影响.有人可以指导.我真的无法弄清楚该怎么做.

可重现代码:

from pymongo import Connection
DB_CONTENT_BASE_KEY = 'contentbase'

def connect_to_db(dbname, hostname = 'localhost', portno = 27017, **kwargs):
    connection = Connection(hostname, portno)
    dbConnection = connection[dbname]
    return dbConnection

class MetawebCustomCollectionBuilder(object):
    # key ought to be a dictionary to filter results from contentbase.
    def __init__(self, inDbConfig, outDbConfig, key = {}, verbose = False):
        self.verbose = verbose
        self.inDbConfig …
Run Code Online (Sandbox Code Playgroud)

python upsert mongodb pymongo

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

如何将数据从一个表插入/更新到另一个表(postgresql)?

有两张桌子

tmp_stat:
date, site_id, ip, block_id, count
Primary Key (date, site_id, ip, block_id)

main_stat:
date, site_id, ip, block_id, count
Primary Key (date, site_id, ip, block_id)
Run Code Online (Sandbox Code Playgroud)

当没有这样的(date,site_id等)时,我需要从tmp_stat向main_stat插入行,并且当它们已经尽快存在时,需要更新计数

tmp_stat包含大约500000行,main_stat包含millons

postgresql performance upsert

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

Postgres upsert:区分新行和更新行

我正在考虑使用 PostgreSQLINSERT .. ON CONFLICT UPDATE功能。理想情况下,我将能够区分哪些行已成功插入,哪些行已更新。有没有办法做到这一点?

sql postgresql upsert

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

Update a field only if it exists in MongoDB

I have a document in collection testcol in MongoDB like this :

{
_id:111,
"xxx":"aaa",
"yyy":"bbb"
}
Run Code Online (Sandbox Code Playgroud)

I want to update the field yyy in the document, if the field is found then update it and if the field is not found then don't do anything.

When I am running my mongo db update command like db.testcol.update({_id:0},{$set:{"zzz":"ccc"}},{upsert: false}). Intentionally I gave the field as "zzz" in the update command so that it shouldn't do anything. But when I run …

upsert mongodb mongodb-query

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

Spark Mongo 连接器:在 MongoDB 连接中仅更新一个属性

假设我有以下 Mongo 文档:

{
 "_id":1, 
 "age": 10,
 "foo": 20
}
Run Code Online (Sandbox Code Playgroud)

和以下 Spark DataFrame df

_id | val
 1  | 'a'
 2  | 'b'
Run Code Online (Sandbox Code Playgroud)

现在我想将val数据帧中的附加到 Mongo 文档中...

使用MongoDB Spark 连接器,我可以通过“_id”附加使用默认的更新插入逻辑,这意味着如果 Spark 数据帧中的“_id”和 Mongo 文档匹配,Mongo 连接器将不会创建新文档,而是更新旧文档。

但!更新的行为基本上类似于替换- 如果我执行以下操作:

df
.write.format("com.mongodb.spark.sql.DefaultSource")
.mode("append")
.option('spark.mongodb.output.uri','mongodb://mongo_server:27017/testdb.test_collection')
.save()
Run Code Online (Sandbox Code Playgroud)

该集合将如下所示:

[   
    {
     "_id":1, 
     "val": 'a'
    },
   {
     "_id":2, 
     "val':'b' 
    }
]
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

[   
    {
     "_id":1, 
     "age": 10,
     "foo": 20
     "val": 'a'
    },
   {
     "_id":2, 
     "val':'b' 
    }
]
Run Code Online (Sandbox Code Playgroud)

我的问题是: …

python upsert mongodb apache-spark

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

如何在 postgresql 9.3 中插入​​批量行并忽略重复项

我有很多行数据要插入到一个表中。表中已有数据。当我像这样进行批量插入时,

INSERT INTO permission(username, permission) values(('john','ticket_view'), ('john','ticket_modify'), ('john','ticket_approve'));
Run Code Online (Sandbox Code Playgroud)

但是我的表已经有一行john, ticket_view在这种情况下我上面的插入查询以错误结束duplicate key value violates unique constraint

如何在 postgresql 9.3 中忽略这个重复问题?我只想插入所有行。如果存在类似的行,我想忽略它。我怎样才能做到这一点?我欢迎你的帮助。

postgresql upsert on-duplicate-key postgresql-9.3

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

DML 操作期间检测到重复行 - Snowflake - Talend

我想使用 Talend 将数据加载到 Snowflake 中。我将 tSnowflakeOutput 与 Upsert 选项一起使用,因为我想插入数据(如果 Snowflake 中不存在),或者更新行(如果存在)。我使用主键来识别已经存在的行。

当我运行我的作业时,出现以下错误:

DML 操作期间检测到重复行

我知道问题是由于 Snowflake 中存在的一行引起的,我想更新该行,但我得到的只是这个错误。你知道为什么吗?

请帮忙 :)

upsert duplicates talend snowflake-cloud-data-platform

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

如何将 pandas DataFrame 更新插入到 Microsoft SQL Server 表?

我想将 pandas DataFrame 更新插入到 SQL Server 表中。这个问题对于 PostgreSQL 有一个可行的解决方案,但 T-SQLON CONFLICT没有INSERT. 我怎样才能为 SQL Server 完成同样的事情?

python sql-server sqlalchemy upsert pandas

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