postgresql 在Select查询中使用case的输出作为条件

72qzrwbm  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(71)

只是好奇,如果我可以运行下面作为一个单一的SQL选择语句,而不使用过程语言(过程,函数,匿名块)。

with cte as (select ' and 1=1' as col1)
select 'test' 
where 2=2 
and case when 1=1 then (select col1 from cte) end;

字符串
我得到下面的错误

ERROR:  argument of AND must be type boolean, not type text
LINE 4: and case when 1=1 then (select col1 from cte) end;


这显然意味着CASE语句的结果被假定为文本值而不是实际条件。
我想要这样做的原因是我想在DeltaLake中运行查询,我不能使用过程语言。只有Select语句是可能的。CTE中的col1可以是不同输入的不同AND条件。
我正在PostgreSQL中尝试此查询。

p4tfgftt

p4tfgftt1#

要在不使用过程语言的情况下实现所需的结果,可以按如下方式重写查询:

WITH cte AS (SELECT ' and 1=1' AS col1)
SELECT 'test'
WHERE 2 = 2
  AND EXISTS (
    SELECT 1
    FROM cte
    WHERE 1 = 1
    AND 1 = 1
  );

字符串

相关问题