Получить столбец со строковой переменной - PullRequest
1 голос
/ 04 августа 2011

Есть ли способ получить определенный столбец на основе текста из переменной.

Например, у вас есть таблица с 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 ]

1 голос
/ 19 марта 2013

В этом случае вам действительно нужно использовать 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 голосов
/ 19 марта 2013

Чтобы запрос был эффективным, движок должен точно знать, какие столбцы должен возвращать запрос, потому что от него может сильно зависеть план запроса.

С такими структурами, как CASE, существуетопределенный уровень динамичности в запросе, но планировщик запросов может по-прежнему иметь представление о том, какие столбцы могут необходимо получить в том или ином случае до выполнения запроса .При действительно динамическом подходе, когда предполагается, что имя столбца извлекается из другого столбца, переменной или параметра запроса, было бы чрезвычайно трудно, если вообще возможно, разработать действительно эффективный план запроса.

Итак, вам действительно нужно сообщить планировщику запросов о необходимых данных во время компиляции запроса.Поэтому либо используйте CASE / встроенный IF / what-have-you, либо верните оба столбца и при необходимости выберите один из двух в вызывающем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...