首页 > 解决方案 > psql 将值的常量列表用作表

问题描述

使用 psql 我想将常量列表用作表,如下所示:

SELECT * 
FROM 
   sportstable as S,
   ('soccer', 'tennis', 'basketball') as T
WHERE
   S.id = someFunction(T.????)

我有常量('soccer'、'tennis'、'basketball'),在这种情况下我需要对它们应用一个名为 someFunction 的函数。

是否可以在 psql 中做这样的事情?我知道 list ('soccer', 'tennis', 'basketball') 不是一张桌子,所以我在使用这个概念时可能会犯一个大错误,但我仍然很好奇 psql 中是否有这样的东西.

标签: postgresql

解决方案


你很接近,你可以使用一个values()子句:

select *
from sportstable s
  cross join ( 
     values ('soccer'), ('tennis'), ('baskedball')
  ) as t(sport)
where s.id = somefunction(t.sport);

但这可能会复制sportstable您可能不想要的行。

我想你宁愿想要:

select *
from sportstable s
where exists (select *
              from ( 
                 values ('soccer'), ('tennis'), ('baskedball')
              ) as t(sport)
              where s.id = somefunction(t.sport));

推荐阅读