Снежинка: IFNULL не может использоваться в subSQL INSERT VALUES - PullRequest
0 голосов
/ 28 марта 2019

Получена ошибка компиляции при попытке использовать IFNULL в предложении INSERT VALUES.

SQL:

INSERT INTO widgets 
VALUES 
(12, (select ifnull(max(c), 0)+1 from DCSN_Testing where c = 1), 444)

Error :

SQL compilation error: Invalid expression 
[(SELECT (NULLABILITY_EXTERNAL(1)) + 1 AS "IFNULL(MAX(C), 0)+1" 
FROM (VALUES (null)) DCSN_TESTING WHERE TRUE)] in VALUES clause

1 Ответ

1 голос
/ 30 марта 2019

У меня обычно нет подвыборов внутри оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...