SELECT语句的WHERE子句中的列名称的通配符?

时间:2012-05-15 14:25:21

标签: mysql sql database select wildcard

是否可以在WHERE子句中指定的列名中包含通配符?我想选择一些东西,但只有当一堆列匹配某个值时(在这种情况下为1)。例如:

SELECT COUNT(id) FROM records WHERE *_check = 1

我有一堆列_seck作为后缀,使用与上面代码类似的东西(不起作用)会非常好。

2 个答案:

答案 0 :(得分:3)

您可以查询information_schema以获取一个查询中的列

SELECT column_name FROM information_schema.columns
WHERE table_schema = 'foo'
 AND table_name = 'bar'
 AND column_name LIKE '%_check'

并根据结果(伪代码)

构建查询
query = "SELECT COUNT(id) FROM records WHERE ";

foreach columName in columnNames
   query = query + " " + column_name + " = 1 OR "
next

query = TrimLastOr(query);

但我不建议这样做,因为mysql information_schema查询的性能很差,因为它们从磁盘读取每个查询。

更好:使用返回

的视图
SELECT id FROM records WHERE col1_check=1 or col2_check=2 ...

因此您可以在多个地方的逻辑中使用它,只需在添加其他_check列时更新视图。

答案 1 :(得分:1)

没有

如果你想做这样的事情,你需要相当于动态SQL。