我需要检查表中是否已存在一个或多个字段,以便我可以使用它们执行 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/