Вот некоторый код, который у нас есть, который запускается в производство:
MERGE INTO ${db_name~}.${schema~}.AGGREGATION_WATERMARK dst
USING ${db_name~}.${schema~}.EVENT_WATERMARK src ON dst.unit_id = src.unit_id
WHEN NOT MATCHED THEN INSERT (unit_id, time) VALUES (src.unit_id, src.time)
WHEN MATCHED AND src.time < dst.time THEN UPDATE
SET dst.time = src.time,
dst._update_time_utc = TO_TIMESTAMP_NTZ(CURRENT_TIMESTAMP);
Может быть, имя столбца не работает для MERGE, но если вы измените внутренний суб-выбор из:
SELECT * FROM (VALUES ('name1', 56.0), ('name2', 29.0))
чтобы назвать столбцы там, например:
SELECT temp.* FROM VALUES ('name1', 56.0), ('name2', 29.0) temp (USERNAME, BALANCE)
тогда, когда вы добавите псевдоним к S
, он должен работать?
SELECT * FROM (SELECT temp.* FROM VALUES ('name1', 56.0), ('name2', 29.0) temp (USERNAME, BALANCE)) S;
внешний select *
просто там чтобы показать, что работает вне содержания MERGE
USING