2

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

例如,我有这张表,其中 A、B、C、D、E、F 作为不同的列名,下面是布尔值,

A | B | C | D | E | F

1 | 1 | 0 | 0 | 1 | 0

我希望检索的只是具有“真”值的列名。所以,我想要的查询结果应该只是 A、B 和 E。

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

提前致谢, Xyles

4

2 回答 2

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
. . .

这会将值放在单独的行上。

于 2012-12-11T16:08:51.350 回答
1

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

可以返回列名,但这不是 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 ...
于 2012-12-11T19:10:13.117 回答