0

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

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

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

4

2 回答 2

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列时更新视图。

于 2012-05-15T14:32:38.080 回答
1

不。

如果你想做这样的事情,你需要动态 SQL 的等价物。

于 2012-05-15T14:28:51.937 回答