sql - Snowflake case 语句返回错误,而不是 ELSE 子句中指定的值

标签 sql merge case snowflake-cloud-data-platform

我需要检查表中是否已存在一个或多个字段,以便我可以使用它们执行 merge into 语句。

我尝试过这个:

select sat_sector_hkey,
CASE 
    WHEN EXISTS(select id from hub_sector)
    THEN (MERGE INTO ...)
END AS id
from sat_sector;

为了进行测试,我仅使用了一个 case 语句,并将 merge into 替换为 THEN...ELSE 值:

SELECT sat_sector_hkey,
CASE 
    WHEN EXISTS(select id from hub_sector)
    THEN '1'
    ELSE ''
END AS id
FROM sat_sector;

当该字段不存在时,查询返回错误而不是'':

SQL compilation error: error line 3 at position 23 invalid identifier 'ID'

我正在使用CASE,因为我需要检查一列是否存在,因为我不知道它是否存在,因为我们的数据来自多个来源的一些技术细节.

最佳答案

试试这个:

  • 构造一个包含整行的对象。
  • 测试构造的对象是否具有“ID”数据。
create or replace temp table maybe_id
as 
select 1 x, 2 id;

select *, 
case 
   when object_construct(a.*):ID is not null
   then '1'
   else ''
end as id 
from maybe_id a
;

对我有用 - 当列 id 有数据时它给出 1 ,当表中不存在该列时给出 `` 。

关于sql - Snowflake case 语句返回错误,而不是 ELSE 子句中指定的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66531931/

相关文章:

ruby-on-rails - 使用|| Rails中的Case开关

mysql - 从消息表中查询对话

MySQL 派生表中列值的总和

mysql - 获取总消耗

arrays - 如果元素本身是数组,合并两个数组(元素 + 元素)的最佳方法是什么

python - pandas:合并 DataFrame 时更新列值

python-3.x - ImportError:没有名为 'keras.layers.merge' 的模块

MySQL 使用 Sum 和 Case

c# - 如果找不到我输入的记录,如何在 SQL 中找到下一个更大的可用记录

SQL Server全文搜索FREETEXTTABLE搜索多个列