我正在尝试在两个SQL Server 2008表之间移动一些数据.如果Table2中的记录与Table1中的电子邮件一起存在,则使用Table1中的数据更新该记录,否则插入新记录.
在表1中,我有许多列; 名字,姓氏,电子邮件等.
如果Table1中的电子邮件存在,我不太确定如何构造查询来更新Table2,如果表2中不存在Table1的电子邮件,我不会插入新行.
我尝试在Google上进行一些搜索,但大多数解决方案似乎都是通过创建一些存储过程来实现的.所以我想知道是否有人可能知道如何构建一个可能做到这一点的合适查询?
我正在编写一个应用程序来将数据从Oracle移动到Sybase,并且需要执行更新/插入操作.在Oracle中,我使用MERGE INTO,但它似乎在Sybase中不可用(无论如何都不在ASE中).我知道这可以用多个语句完成,但由于几个原因,我真的想把它变成一个语句.
有什么建议?
我发现使用可写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) 雪花是否支持使用类似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
谢谢,
我的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.(不,我没有使用存储过程,如果那是你的第一个问题...)
提前致谢
我想要插入数组元素,所以如果一个不匹配然后插入它,否则更新它.
我尝试了这个问题的答案,如果数组元素已经存在,它可以正常工作.如果元素不存在,那么它会在数组字段下创建一个子元素"$".
我的Mongo结构如下:
Widget (collection)
--Name
--Properties (array)
--Name
--Value
Run Code Online (Sandbox Code Playgroud)
我的应用程序从WebService调用获取Widget Name和Properties列表.我希望迭代提供的属性并在Name已经存在时更新MongoDB中的值,或者如果不存在则将新属性插入Properties数组.
当我尝试使用方法[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) upsert当表格中的2列中的一列发生冲突时,是否可以在Postgres 9.5中执行此操作.基本上我有2列,如果任何列抛出唯一约束违规,那么我想执行更新操作.
特定
=> 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_id和entry_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)
是否有可能在这里检查是否存在外键?
我有一个包含单个主键的表.当我尝试插入时,尝试插入具有现有密钥的行可能会导致冲突.我想允许插入更新所有列?这有什么简单的语法吗?我试图让它"upsert"所有列.
我正在使用PostgreSQL 9.5.5.
upsert ×10
sql ×6
postgresql ×5
merge ×3
mongodb ×2
sql-insert ×2
arrays ×1
database ×1
insert ×1
python ×1
snowflake-cloud-data-platform ×1
spring ×1
sql-server ×1
sybase-ase ×1