1

我正在尝试从表中获取列名。我想提供行 id,我只想要特定行的列的值(由 id 标识)为“true”的列名(我的表有一堆布尔字段)。

我想要类似的东西:

SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME.value = true
        AND TABLE_THE_COLUMN_IS_FROM.id = "some_id"

其中 .value 将是可变的,基本上检查每一列以查看它是否为真。

我知道我可以只获取行的值并遍历,只返回值为 true 的值,但我想看看是否有一种方法可以一步完成。提前感谢任何知道的人!

4

2 回答 2

2

不管你怎么剪,这可能会相当难看,但这里有一个选择:

select columns.column_name
from bool_table
inner join information_schema.columns
on columns.table_schema = 'your_db'
and columns.table_name = 'bool_table'
and ((columns.column_name = 'bool_1' and bool_table.bool_1 = 1)
     or (columns.column_name = 'bool_2' and bool_table.bool_2 = 1))
where bool_table.id = 25

您还可以潜在地查询 information_schema.columns 以动态生成列语句列表,以便您可以动态生成查询,甚至使用 mysql 中的动态 sql 在存储过程中执行它。

于 2011-04-08T03:28:26.933 回答
2

没有办法在一个查询中动态扫描表的模式并检查其值。实现您想要的最佳方法是您建议的方法:在客户端查询行,然后在列中循环搜索您寻求的值。另一种选择是在客户端使用 INFORMATION SCHEMA 视图查询表模式,使用 where 子句构建 SQL 语句,在所有布尔列中查找 True 值,执行该语句并检查结果。

于 2011-04-08T03:41:01.790 回答