MySQL concat () для создания имен столбцов, которые будут использоваться в запросе?

Примерно так ...

this.btnTest.Click+=new RoutedEventHandler(btnTest_Click);
13
задан Arjan 12 February 2016 в 13:05
поделиться

4 ответа

Я ранее говорил, что это невозможно сделать, но я ошибался. Мне самому понадобилось что-то подобное, поэтому я огляделся и обнаружил, что подготовленные на стороне сервера операторы позволяют создавать и выполнять произвольные операторы SQL из строк.

Вот пример, который я только что сделал, чтобы доказать концепция:

set @query := (
  select concat(
    "select",
      group_concat(concat("\n  1 as ", column_name) separator ','),
    "\nfrom dual")
  from information_schema.columns
  where table_name = 'columns')
;
prepare s1 from @query
;
execute s1
;
deallocate prepare s1
;
25
ответ дан 1 December 2019 в 18:55
поделиться

Если количество столбцов фиксировано, то нединамический подход может быть таким:

select 
  case mytable.mycolumn
    when 1 then column1  -- or: when 'a' then columna
    when 2 then column2
    when ...
    else ...
  end as my_semi_dynamic_column
from ...
13
ответ дан 1 December 2019 в 18:55
поделиться

Я бы посоветовал посмотреть information_schema . Следующий код не тестировался, но теоретически должен работать. Очевидно, замените имя вашей таблицы на соответствующее имя таблицы или ссылку на information_schema.tables и используйте table_type в предложении where

select concat('column', column_name) from information_schema.columns where table_name ='your table name'
0
ответ дан 1 December 2019 в 18:55
поделиться

Я не верю, что вы можете сделать это с помощью CONCAT () и CONCAT_WS () . Я бы рекомендовал использовать язык, с которым вы работаете, для создания имен полей. Сделать это таким образом было бы довольно страшно, в зависимости от того, откуда взялись данные в базе данных.

3
ответ дан 1 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: