2011-08-04 81 views
1

有没有办法根据变量中的文本获取特定的列。使用字符串变量获取列

比如你有一个表,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操作符,但不必写出来会很好。

感谢

+1

CASE操作符有什么问题?我不认为有更好的解决方案存在。 – alexius

回答

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; 
0

为了查询是有效的,发动机需要精确地知道哪些列查询即将复出,因为查询计划可以极大地依赖于它。

有了这样CASE结构,有动态性的查询一定的水平,但查询规划仍然可以有哪些列可以需要在一种情况下检索或其他查询被执行之前的想法。通过真正动态的方法,当列名应该从另一列,变量或查询参数中检索时,如果可能的话,想出一个非常有效的查询计划将非常困难。

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