根据另一个表上的值过滤列

时间:2019-08-29 06:23:47

标签: mysql sql

我想获取名称以某些模式开头的特定列。

表_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

但是我想获取该列名称的值。

谢谢

1 个答案:

答案 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;