当有多个键列时如何形成Merge查询?
How to form the Merge query when there are multiple key columns?
在雪花数据库上,我正在尝试 运行 合并 table:PK_TABLE_TEST
。这个table DDL如下:
CREATE OR REPLACE TABLE "LOAD".pk_table_test (
RESORT STRING NOT NULL,
STAYDATE DATE NOT NULL,
RATE_CODE STRING NOT NULL,
RNS NUMBER (38, 0),
GST NUMBER (38, 0),
REVENUE FLOAT,
REPORT_DATE DATE NOT NULL,
SYS_INS_DATE timestamp,
PRIMARY KEY (RESORT),
UNIQUE(RESORT, STAYDATE, RATE_CODE, REPORT_DATE)
);
我的登台数据库中有相同的 table,名称为:pk_table_test_stg
。
在我的存储过程中,我通过从 INFORMATION_SCHEMA
获取所有键来形成合并查询。下面是合并查询:
MERGE INTO LOAD.PK_TABLE_TEST target USING LOAD.PK_TABLE_TEST_STG stg ON target.RESORT = stg.RESORT and target.STAYDATE = stg.STAYDATE and target.RATE_CODE = stg.RATE_CODE and target.REPORT_DATE = stg.REPORT_DATE WHEN MATCHED THEN UPDATE SET target.RESORT = stg.RESORT,target.STAYDATE = stg.STAYDATE,target.RATE_CODE = stg.RATE_CODE,target.RNS = stg.RNS,target.GST = stg.GST,target.REVENUE = stg.REVENUE,target.REPORT_DATE = stg.REPORT_DATE,target.SYS_INS_DATE = '2020-10-10 4:35:24'; WHEN NOT MATCHED THEN INSERT (RESORT,STAYDATE,RATE_CODE,RNS,GST,REVENUE,REPORT_DATE,SYS_INS_DATE) VALUES (stg.RESORT,stg.STAYDATE,stg.RATE_CODE,stg.RNS,stg.GST,stg.REVENUE,stg.REPORT_DATE,stg.SYS_INS_DATE);
但是当我 运行 查询时,它说 unexpected WHEN
。
SQL Error [1003] [42000]: SQL compilation error:
syntax error line 2 at position 272 unexpected 'WHEN'.
我形成的查询有语法错误吗?当 ON
条件中有多个列时,它是正确的语法吗?
谁能告诉我如何解决这个问题?感谢任何帮助。
您的查询中有一个分号:
target.SYS_INS_DATE = '2020-10-10 4:35:24';如果不匹配则插入
尝试删除这个:-)
有关语法(看起来正确)的更多信息可在此处找到:https://docs.snowflake.com/en/sql-reference/sql/merge.html
在雪花数据库上,我正在尝试 运行 合并 table:PK_TABLE_TEST
。这个table DDL如下:
CREATE OR REPLACE TABLE "LOAD".pk_table_test (
RESORT STRING NOT NULL,
STAYDATE DATE NOT NULL,
RATE_CODE STRING NOT NULL,
RNS NUMBER (38, 0),
GST NUMBER (38, 0),
REVENUE FLOAT,
REPORT_DATE DATE NOT NULL,
SYS_INS_DATE timestamp,
PRIMARY KEY (RESORT),
UNIQUE(RESORT, STAYDATE, RATE_CODE, REPORT_DATE)
);
我的登台数据库中有相同的 table,名称为:pk_table_test_stg
。
在我的存储过程中,我通过从 INFORMATION_SCHEMA
获取所有键来形成合并查询。下面是合并查询:
MERGE INTO LOAD.PK_TABLE_TEST target USING LOAD.PK_TABLE_TEST_STG stg ON target.RESORT = stg.RESORT and target.STAYDATE = stg.STAYDATE and target.RATE_CODE = stg.RATE_CODE and target.REPORT_DATE = stg.REPORT_DATE WHEN MATCHED THEN UPDATE SET target.RESORT = stg.RESORT,target.STAYDATE = stg.STAYDATE,target.RATE_CODE = stg.RATE_CODE,target.RNS = stg.RNS,target.GST = stg.GST,target.REVENUE = stg.REVENUE,target.REPORT_DATE = stg.REPORT_DATE,target.SYS_INS_DATE = '2020-10-10 4:35:24'; WHEN NOT MATCHED THEN INSERT (RESORT,STAYDATE,RATE_CODE,RNS,GST,REVENUE,REPORT_DATE,SYS_INS_DATE) VALUES (stg.RESORT,stg.STAYDATE,stg.RATE_CODE,stg.RNS,stg.GST,stg.REVENUE,stg.REPORT_DATE,stg.SYS_INS_DATE);
但是当我 运行 查询时,它说 unexpected WHEN
。
SQL Error [1003] [42000]: SQL compilation error:
syntax error line 2 at position 272 unexpected 'WHEN'.
我形成的查询有语法错误吗?当 ON
条件中有多个列时,它是正确的语法吗?
谁能告诉我如何解决这个问题?感谢任何帮助。
您的查询中有一个分号:
target.SYS_INS_DATE = '2020-10-10 4:35:24';如果不匹配则插入
尝试删除这个:-)
有关语法(看起来正确)的更多信息可在此处找到:https://docs.snowflake.com/en/sql-reference/sql/merge.html