2017-02-02 1 views
0

У меня есть таблица со следующей структурой:Получить содержание столбцов, начиная с подстроки

| ID | abc1 | abc2 | abc3 | def1 | def2 | def3 | 
|----|--------|--------|--------|--------|--------|--------| 
| 1 | Text 1 | Text 2 | Text 3 | Text A | Text B | Text C | 
| 2 | Text 4 | Text 5 | Text 6 | Text D | Text E | Text F | 

Теперь я хочу, чтобы получить содержимое всех столбцов, начиная с abc.

С

select column_name from information_schema.columns 
where table_name='tab1' 
and (column_name like 'abc%') 

я получаю необходимые столбцы:

abc1 
abc2 
abc3 

Как я могу получить их содержание, а? Таким образом, желаемый результат будет:

| abc1 | abc2 | abc3 | 
|--------|--------|--------| 
| Text 1 | Text 2 | Text 3 | 
| Text 4 | Text 5 | Text 6 | 

Мой подход был поставить этот запрос в другой запрос, как это:

select (select column_name from information_schema.columns 
where table_name='tab1' 
and (column_name like 'abc%')) 
from tab1 

Но я получаю эту ошибку:

Subquery returns more than 1 row 
+1

Вы должны использовать динамический SQL и выполнить его. – xQbert

+0

@xQbert: Не могли бы вы привести мне пример? – user1170330

+0

Ответ TimoSolo, кажется, дает хороший пример: http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure Как вы могли бы передать имя вашей таблицы и cols из ваш внутренний запрос. Обратите внимание, что вам, вероятно, придется использовать Group_concat (column_name SEPARATOR ',') 'для объединения полей – xQbert

ответ

1

Как указано в комментариях, для получения значений из выбранных столбцов вам нужен динамический SQL.

--get the column names in a comma separated format 
SELECT GROUP_CONCAT(COLUMN_NAME) 
INTO @COLS --variable that holds the columns 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'tab1' 
AND COLUMN_NAME LIKE 'abc%'; 

SET @TBL= 'tab1'; 

SET @S= CONCAT('select ',@COLS, ' from ', @TBL); 

PREPARE STMT FROM @S; 

EXECUTE STMT; 

DEALLOCATE PREPARE STMT; 

Sample Demo

+0

удалите комментарий и попробуйте. –

+0

Я просто получаю пустую строку. – user1170330

+0

не уверен, что вы подразумеваете под этим. –

Смежные вопросы