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 不使用第二张桌子?的主要内容,如果未能解决你的问题,请参考以下文章

按我的第二张桌子的计数(*)排序需要很长时间

每月最后一天加入第二张桌子

INNER JOIN:第二张表的限制为 0,1

如果ID存在于第二张或第三张表中,如何从第一张表中高效选择?

PostgreSQL Upsert 用于几乎相似的值

仅当值不存在时才返回行