我一直在环顾四周,试图找到一种方法来检索列名(数据类型是布尔值),只有当它是“真”/“1”时。
例如,我有这张表,其中 A、B、C、D、E、F 作为不同的列名,下面是布尔值,
A | B | C | D | E | F
1 | 1 | 0 | 0 | 1 | 0
我希望检索的只是具有“真”值的列名。所以,我想要的查询结果应该只是 A、B 和 E。
有没有办法做到这一点?还是完全不可能完成,我应该重新设计我的数据库?
提前致谢, Xyles
一个查询不能有不同的列数。您可以将列的名称与以下内容连接在一起:
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
. . .
这会将值放在单独的行上。
我建议您重新考虑您的数据库设计。
可以返回列名,但这不是 SQL 编程的规范模式,查询将比它们需要的要复杂得多。
如果您需要返回的是一个包含逗号分隔值列表的字符串,列表中的每个值都代表一个 TRUE 条件,我建议您考虑 MySQLSET
数据类型。例如
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 ...