我想获取名称以某些模式开头的特定列。
表_1
abcA| abcB | abcC | xyD | mnE
1 | 2 | 3 | 4 | 5
6 | 7 | 8 | 9 | 10
11 | 12 | 13 | 14 | 15
从上表中,我需要类似输出
abcA | abcB | abcC
1 | 2 | 3
6 | 7 | 8
11 | 12 | 13
应该通过过滤来动态选择列,就像任何以abc开头的列名都应该被选择一样。
我尝试过此查询
"select column_name from information_schema.columns
where table_name='table_1' and column_name like 'abc%';"
它提供了另一个仅具有列名的表
列名
abcA
abcB
abcC
但是我想获取该列名称的值。
谢谢
答案 0 :(得分:2)
这是糟糕的表设计,并且很难编写可以选择动态列名的代码。这是我建议您使用的设计:
ID | name | pos
1 | abcA | 1
2 | abcB | 1
3 | abcC | 1
4 | xyD | 1
5 | mnE | 1
6 | abcA | 2
7 | abcB | 2
8 | abcC | 2
9 | xyD | 2
10 | mnE | 2
11 | abcA | 3
12 | abcB | 3
13 | abcC | 3
14 | xyD | 3
15 | mnE | 3
有了这种设计,您只需要一个非常简单的查询:
SELECT pos, GROUP_CONCAT(ID) AS ids
FROM yourTable
WHERE name LIKE 'abc%'
GROUP BY pos;