是否有办法根据变量中的文本获取特定列。
例如,你有一个带有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运算符,但不必写出来会很好。
由于
答案 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,要么返回两列,并根据需要在调用应用程序中选择两者。