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