获取带有字符串变量的列

时间:2011-08-04 04:44:28

标签: postgresql

是否有办法根据变量中的文本获取特定列。

例如,你有一个带有a,b,c的表

您想查询表d,e,f

列c存储字段名称e或f

SELECT a, b, CAST(c as ?) AS e_or_f FROM table1 JOIN table2

-

显然你可以使用if / else或case运算符,但不必写出来会很好。

由于

2 个答案:

答案 0 :(得分:1)

在这种情况下,您真正​​想要的是使用CASE,可能与CTE或内联视图混合使用。例如:

SELECT CASE WHEN 'foo' = myvar THEN foo
            WHEN 'bar' = myvar THEN bar
            WHEN 'baz' = myvar THEN baz
  FROM foobarbaz 
  CROSS JOIN (SELECT ?::text AS myvar) v;

答案 1 :(得分:0)

为了使查询有效,引擎需要准确知道查询将返回哪些列,因为查询计划可能在很大程度上取决于它。

对于像CASE这样的结构,查询中存在一定程度的动态性,但查询规划者仍然可以了解在一种情况下需要检索 在执行查询之前。使用真正动态的方法,当应该从另一列,变量或查询参数中检索列名时,如果可能的话,提出一个非常有效的查询计划是非常困难的。

因此,您确实需要让查询规划人员在编译查询时了解所需的数据。因此,要么使用CASE / inline IF / what-have-you,要么返回两列,并根据需要在调用应用程序中选择两者。