当列值匹配约束时,mysql获取列名

时间:2011-04-08 03:11:34

标签: mysql information-schema

我正在尝试从表中获取列名。我想提供行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的那些,但我想知道是否有办法一步完成所有操作。提前感谢任何知道的人!

2 个答案:

答案 0 :(得分: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在存储过程中执行它。

答案 1 :(得分:2)

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