Exasol UPSERT 不使用第二张桌子?
Posted
技术标签:
【中文标题】Exasol UPSERT 不使用第二张桌子?【英文标题】:Exasol UPSERT without using a second table? 【发布时间】:2022-01-18 11:58:45 【问题描述】:我在网上找不到有关此问题的任何信息。似乎 ORACLE 也有类似的问题,使用DUAL
处理,正如*** answer 中所建议的那样。
但是我们如何在 Exasol 中做同样的事情呢?根据their documentation,需要MERGE
使用辅助表。
我尝试使用与 Oracle 相同的方法,但无济于事:
MERGE INTO TEST.TABLE USING SYS.DUAL ON "COLUMN_1" = "foo"
WHEN MATCHED THEN UPDATE SET "COLUMN_2" = "quux"
WHEN NOT MATCHED THEN INSERT ("COLUMN_1", "COLUMN_2") VALUES ("foo", "bar")
[2021-12-15 11:22:47] [0A000] Feature not supported: Merge using a system table as source that is no view. (Session: 1719203050222845952)
不能像在其他 RDBMS 中一样 UPSERT
吗?
【问题讨论】:
【参考方案1】:您可以像这样重写查询:
MERGE INTO TEST.TABLE
USING (select 'foo' as s) s ON COLUMN_1 = s
WHEN MATCHED THEN UPDATE SET COLUMN_2 = 'quux'
WHEN NOT MATCHED THEN INSERT (COLUMN_1, COLUMN_2) VALUES ('foo', 'bar')
这样您将消除 DUAL 表并保持正确的连接子句。
【讨论】:
以上是关于Exasol UPSERT 不使用第二张桌子?的主要内容,如果未能解决你的问题,请参考以下文章