Я пытаюсь выбрать столбцы, имена которых являются содержимым других столбцов. Я использую MySQL 5.6.
Допустим, у меня есть "table1":
+------+------------+------------+---------------+---------------+
| id | val_int1 | val_int2 | val_string1 | val_string2 |
+------+------------+------------+---------------+---------------+
| 1 | 70 | 88 | xxx | yyy |
+------+------------+------------+---------------+---------------+
И "table2":
+------+--------+----------+
| id | type | ref_id |
+------+--------+----------+
| 10 | i1 | 1 |
| 20 | s2 | 1 |
+------+--------+----------+
Что я хочу сделать, это: объедините table1 и table2, поле table2.type содержит имя столбца из table1, который я хочу выбрать. И еще есть проблема в том, что поле типа содержит только сокращения, которые мне нужно расширить.
Это заканчивается следующим оператором SQL:
SELECT
t1.id,
IF(t2.type REGEXP 'i[0-9]+', REPLACE(t2.type, 'i', 'val_int'), REPLACE(t2.type, 's', 'val_string'))
FROM
table1 t1, table2 t2
WHERE
t1.id = t2.ref_id AND t1.id = 1
В результате функции REPLACE возвращают значения val_int1 и val_string2. как фиксированные строки, а не обрабатывать его как имена столбцов.
Что я действительно ожидаю, так это:
+-----+-------+
| 1 | 70 |
| 1 | yyy |
+-----+-------+