我有以下查询将插入到表中:
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
中完成,因为将来我们可能会有更多类型的位置。
答案 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);