insert into 中的雪花多重选择返回意外值错误

时间:2021-03-11 09:13:00

标签: sql sql-insert snowflake-cloud-data-platform

我有以下查询将插入到表中:

INSERT INTO HUB_LOCATION (LOCATION_HKEY, LOAD_DT, RECORD_SRC, LOCATION_TYPE, LOCATION_VALUE)
SELECT 
        md5(CONCAT_WS('', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK)) AS BLOCK_HKEY, CURRENT_TIMESTAMP(), 'ONA', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK
FROM TEMP_TABLE WHERE BLOCK_HKEY NOT IN (SELECT LOCATION_HKEY FROM HUB_LOCATION) AND EXISTS (SELECT BLOCK FROM TEMP_TABLE);

我还需要插入具有 FACILITY_ID 的另一行,因此我尝试执行以下操作:

INSERT INTO HUB_LOCATION (LOCATION_HKEY, LOAD_DT, RECORD_SRC, LOCATION_TYPE, LOCATION_VALUE)
 values 
        ( md5(CONCAT_WS('', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK)) AS BLOCK_HKEY, CURRENT_TIMESTAMP() as ts, 'SRC', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK FROM TEMP_TABLE WHERE BLOCK_HKEY NOT IN (SELECT LOCATION_HKEY FROM HUB_LOCATION) AND EXISTS (SELECT BLOCK FROM TEMP_TABLE)),
        ( md5(CONCAT_WS('', 'FACILITY_ID', OBJECT_CONSTRUCT(*):FACILITY_ID)) AS FACILITY_HKEY, CURRENT_TIMESTAMP() as ts, 'SRC', 'FACILITY', OBJECT_CONSTRUCT(*):FACILITY_ID FROM TEMP_TABLE WHERE FACILITY_HKEY NOT IN (SELECT LOCATION_HKEY FROM HUB_LOCATION) AND EXISTS (SELECT FACILITY_ID FROM TEMP_TABLE));

它产生了一个错误:

<块引用>

SQL 编译错误:位置 65 处的语法错误第 3 行意外 '作为'。位置 80 处的语法错误第 3 行意外 'CURRENT_TIMESTAMP'。位置 100 处的语法错误第 3 行意外 '作为'。

我可以单独处理每个字段,但最好在一个 INSERT INTO 中完成,因为将来我们可能会有更多类型的位置。

1 个答案:

答案 0 :(得分:0)

我使用 UNION ALL 找到了我自己的答案:

INSERT INTO HUB_LOCATION (LOCATION_HKEY, LOAD_DT, RECORD_SRC, LOCATION_TYPE, LOCATION_VALUE)
SELECT md5(CONCAT_WS('', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK)) AS BLOCK_HKEY, CURRENT_TIMESTAMP(), 'ONA', 'BLOCK', OBJECT_CONSTRUCT(*):BLOCK FROM TEMP_TABLE WHERE BLOCK_HKEY IS NOT NULL AND BLOCK_HKEY NOT IN (SELECT LOCATION_HKEY FROM HUB_LOCATION) AND EXISTS (SELECT OBJECT_CONSTRUCT(*):BLOCK FROM TEMP_TABLE)
UNION ALL
SELECT md5(CONCAT_WS('', 'FACILITY', OBJECT_CONSTRUCT(*):FACILITY_ID)) AS FACILITY_HKEY, CURRENT_TIMESTAMP(), 'ONA', 'FACILITY', OBJECT_CONSTRUCT(*):FACILITY_ID FROM TEMP_TABLE WHERE FACILITY_HKEY IS NOT NULL AND FACILITY_HKEY NOT IN (SELECT LOCATION_HKEY FROM HUB_LOCATION) AND EXISTS (SELECT OBJECT_CONSTRUCT(*):FACILITY_ID FROM TEMP_TABLE);
相关问题