У меня обычно нет подвыборов внутри оператора VALUES INSERT, на самом деле я не могу вспомнить, чтобы он выполнялся один раз за все годы написания SQL.
Тем не менее, яРекомендуем вам попробовать приведенный ниже пример того, что я бы назвал «INSERT INTO SELECT» или то, что в документации Snowflake называют «вставка одной строки с использованием запроса», что является IMO - простой / чистый способ написания SQL.
Примечание: это было проверено на Снежинке.
-- this is a simple test table, represents your
-- DCSN_Testing table, results are a value of 5
SELECT IFNULL(MAX(id), 0)+1 FROM first_names;
-- create a test table
DROP TABLE stackoverflow_55387209;
CREATE TABLE stackoverflow_55387209(id NUMBER,
new_id NUMBER, other_id NUMBER);
-- test for your error, results confirm your findings
INSERT INTO stackoverflow_55387209 (id, new_id, other_id)
VALUES (12, (select max(ifnull(id, 0) + 1) FROM first_names), 444) ;
results:
SQL compilation error: Invalid expression [(SELECT MAX((NULLABILITY_EXTERNAL(FIRST_NAMES.ID)) + 1) AS "NEW_ID"
FROM FIRST_NAMES AS FIRST_NAMES)] in VALUES clause
-- rewrite to "INSERT INTO SELECT" type of SQL Query, as described in documentation
-- https://docs.snowflake.net/manuals/sql-reference/sql/insert.html#single-row-insert-using-a-query
INSERT INTO stackoverflow_55387209
SELECT 12, MAX(IFNULL(id, 0) + 1), 444 FROM first_names ;
results: number of rows inserted = 1