首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL选择列名包含子字符串的列

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

Stack Overflow用户
提问于 2015-09-23 01:23:59
回答 3查看 1.7K关注 0票数 0

我有一个表格,里面有很多关于一个人的字段,然后是其他人的几个推荐。

它们被命名为:

"recommendation_1_name“"recommendation_1_company”“recommendation_1_contact”"recommendation_2_name“"recommendation_2_company”"recommendation_2_contact“等等。

我正在尝试提出一个声明,只允许我获得推荐。

我导入了一个excel文件到表格中,所以它只是一个很大的表格。

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

代码语言:javascript
运行
复制
select * from questionnaire where 'COLUMN_NAME' like '%recommendation%';

我一直在摆弄它,制作了一个只有推荐字段的表,但它仍然没有返回任何内容。

EN

回答 3

Stack Overflow用户

发布于 2015-09-23 01:32:08

Mysql:选择recommendation_1_name,recommendation_2_name等...from (table) where ( user ) = (USERID)或者您可以唯一标识该用户。

票数 0
EN

Stack Overflow用户

发布于 2015-09-23 01:48:44

此查询生成一个动态的SELECT查询,其中包含所有字段,如'recommendation%‘。您只需设置数据库名和表名。您可以直接查询我的查询结果,或者添加WHERE子句。

代码语言:javascript
运行
复制
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%';
票数 0
EN

Stack Overflow用户

发布于 2015-09-23 02:35:19

你真的需要规范化你的模式。

但只是作为其他情况下的实验和例子(也许有人真的需要它)。以下是使用存储过程解决此问题的解决方案:

代码语言:javascript
运行
复制
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'替换为您的真实数据库名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32723116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档