[英]MySQL Select columns where the column name contains a substring
我有一张桌子,上面有很多关于一个人的字段,然后是其他人的一些建议。
它们被命名为:
“ 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%';
我一直在用仅推荐字段创建表,但它仍然不返回任何内容。
Mysql:从(表)中选择“ commentation_1_name”,“ commentation_2_name”等...,其中(USER)=(USERID),或者您可以唯一地标识该用户。
该查询为您动态生成一个带有“ recommendation%”之类的所有字段的SELECT查询。 您只需设置数据库名称和表名称。 您可以直接查询我的查询结果或添加WHERE子句。
SELECT
CONCAT( 'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ',\n')
)
FROM information_schema.columns
WHERE TABLE_SCHEMA = 'DBNAME'
AND TABLE_NAME = 'TABLENAME'
AND COLUMN_NAME LIKE 'recommendation%';
您确实需要规范化架构。
但是,就像其他情况下的实验和示例一样(也许有人真的需要它)。 这是使用存储过程解决这种情况的解决方案:
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'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.