从条件中检索mysql表中的某些列名

时间:2012-12-11 15:22:53

标签: mysql sql database

我一直在环顾四周,试图找到一种方法来检索列名(数据类型是布尔值),只要它是“真”/“1”。

例如,我将此表与A,B,C,D,E,F作为不同的列名称和它下面的布尔值,

A | B | C | D | E | F

1 | 1 | 0 | 0 | 1 | 0

我想要检索的内容,即只有具有“true”值的列名。因此,我从查询中得到的结果应该只是A,B和E.

有没有办法做到这一点?或者完全不可能完成,我应该重新设计我的数据库?

提前致谢, Xyles

2 个答案:

答案 0 :(得分:1)

查询不能包含不同数量的列。您可以将列的名称连接起来:

select concat_ws(',', (case when A then 'A' else '' end),
                 (case when B then 'B' else '' end),
                 ...
                )
from t

您还可以将它们放在单独的行中,并使用union

select t.*, 'A'
from t
where A
union all
select t.*, 'B'
from t
where B
. . .

这会将值放在不同的行上。

答案 1 :(得分:1)

我建议您重新考虑数据库设计。

可以完成返回列名,但它不是SQL编程的规范模式,并且查询将比他们需要的更多涉及。

如果您需要返回的是一个包含以逗号分隔的值列表的字符串,并且列表中的每个值都表示TRUE条件,我建议您考虑MySQL SET数据类型。 e.g。

mycol SET('A','B','C','D','E','F') NOT NULL

http://dev.mysql.com/doc/refman/5.5/en/set.html

INSERT INTO mytable (mycol) VALUES ('A,B,E');

UPDATE mytable SET mycol = 'A,B,E' WHERE ...

SELECT mycol FROM mytable WHERE ...