Использование запроса SELECT в качестве имени столбца в MySQL


Я хочу получить значения столбца auto_increment в моей таблице (пример). Однако загвоздка в том, что у меня нет имени поля auto_increment. В настоящее время я использую следующий запрос для определения имени поля:

SELECT column_name FROM information_schema.columns WHERE table_name = 'example' AND extra = 'auto_increment' LIMIT 1;

Теперь я хотел бы передать результат этого запроса в виде «строки» моему фактическому запросу и получить значение. Если бы я хотел сделать это за один раз, как бы я это сделал, потому что приведенный ниже запрос, который должен дать мне все используемые значения auto_increment, дает только приведенный выше результат, а именно имя столбца auto_increment.

SELECT (
   SELECT column_name
   FROM information_schema.columns
   WHERE table_name =  'example'
   AND extra =  'auto_increment'
   LIMIT 1
) AS pri
FROM example 

Будем признательны за любые мысли :)
С уважением,

Андреас


person Andreas Jarbol    schedule 21.07.2013    source источник
comment
Вы не можете в стандартном SQL. Вам нужно будет создать новый запрос, используя результаты запроса на получение имени столбца идентификатора. В основном вам нужен sql-эквивалент eval().   -  person Marc B    schedule 22.07.2013
comment
Что вы действительно пытаетесь сделать? Значение в столбце автоинкремента не особо интересное, просто куча целых чисел. И вы знакомы с оператором prepare. Вам нужно использовать динамический SQL, чтобы делать то, что вы просите.   -  person Gordon Linoff    schedule 22.07.2013


Ответы (1)


Вот пример того, как вы могли бы сделать это, используя prepare и execute:

SELECT @s := concat('select `', column_name, '` from example e')
FROM information_schema.columns
WHERE table_name =  'example' AND extra =  'auto_increment'
LIMIT 1

prepare stmt from @s;
execute stmt;
deallocate prepare stmt;
person Gordon Linoff    schedule 22.07.2013