MySQL选择列名称包含子字符串的列

时间:2015-09-22 17:23:59

标签: mysql sql

我有一张桌子上有很多关于一个人的字段,然后有一些其他人的建议。

他们被命名为:

" recommendation_1_name" " recommendation_1_company" ' recommendation_1_contact" " recommendation_2_name" " recommendation_2_company" " recommendation_2_contact" 等等。

我想提出一个声明,只允许我得到建议。

我将一个excel文件导入到表中,因此它只是一个大表。

这就是我所拥有的,它返回一个空集。

select * from questionnaire where 'COLUMN_NAME' like '%recommendation%';

我一直在玩它只制作一张只包含推荐字段的表,但它仍然没有返回任何内容。

2 个答案:

答案 0 :(得分:0)

Mysql:从(table)中选择recommendation_1_name,recommendation_2_name等...(USER)=(USERID),或者你可以唯一地标识该用户。

答案 1 :(得分:0)

您确实需要规范化架构。

但就像其他一些案例的实验和例子(也许有人真的需要它)。以下是使用存储过程解决此案例的解决方案:

CREATE PROCEDURE `get_recommendations`()

BEGIN
DECLARE Q VARCHAR(100);
DECLARE C_NAME VARCHAR(100);
DECLARE cur CURSOR FOR SELECT GROUP_CONCAT(column_name) as `columns`
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' 
  AND TABLE_NAME ='questionnaire'
  AND COLUMN_NAME LIKE  '%recommendation%'
;

SET Q  = 'SELECT ';

OPEN cur;
   FETCH cur INTO C_NAME;
   SET Q = CONCAT(Q,C_NAME,' ');
CLOSE cur;

SET @Q = CONCAT(Q,'FROM questionnaire;');

 PREPARE stmt FROM @Q;
 EXECUTE stmt ;

END

不要忘记用您的真实数据库名称替换TABLE_SCHEMA = 'test'