mysql - 我怎样才能对数据库中的多个表或类似的东西进行全局选择?

标签 mysql sql select

我在同一个数据库中有一系列表。表名以组分隔,即同一组中的表具有相同的前缀。
这些表共享一个(至少一个)具有相同信息和相同列名的列(除了只有几个列名不同的表)。
我感兴趣的是了解哪些表具有特定值。 IE。我想获取其列具有特定值的表名,或者等效地我想对所有表执行 SELECT * WHERE COLUMN=value 并获取所有记录。我宁愿有表名,除非它太难了。
我为获得结果所做的操作如下:
我在编辑器中针对一组(即具有相同前缀的)和 where 子句的所有表手动编写了一个选择。
我复制/粘贴了所有这些选择并在查询 cli 中运行它们。
然后我在编辑器中进行了全部替换并将表名替换为第二组并再次复制/粘贴并运行它。
我继续对所有表进行替换/复制/粘贴(并在需要时替换列名)。
这似乎可以满足我的要求,但我觉得这很愚蠢。
我想一定有比这种方法更“专业”的方法,但我不知道如何。
最好的方法是什么?
以我的方式,如果我有另一个例如5 组我将不得不一遍又一遍地这样做。

最佳答案

您可以通过在您感兴趣的表上创建 View 来使事情变得更容易一些: 类似

CREATE VIEW group_one_view AS 
SELECT 'taba' as tab_name, field1 FROM table_a
UNION ALL
SELECT 'tabb' as tab_name, field1 FROM table_b
UNION ALL
SELECT 'tabc' as tab_name, diff_field_name FROM table_c

然后你可以像使用表格一样使用group_one_view

select * from group_one_view where field1 = 'cheese'

http://sqlfiddle.com/#!2/a09b4/1

编辑

您可以从 information_schema 获得一些帮助(需要稍微完成查询 - 但可以节省一些键盘工作)

SELECT CONCAT(  'select ''', table_name,  ''' tab_name, field1 from ', table_name,  ' union all ' ) 
FROM information_schema.`TABLES` 
WHERE table_name LIKE  'group_prefix_%'

关于mysql - 我怎样才能对数据库中的多个表或类似的东西进行全局选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243111/

相关文章:

mysql - 使用两列标记 MySQL 中的重复序列

sql - 将 SQL 格式化为一行

java - 在 HQL 上加入声明

php - Mysql SELECT WHERE $VAR IN $VAR,$VAR,$VAR

javascript - 如何使用 jQuery 检查所选选项的整数值?

javascript - 返回对象的 ID 为零(在数据库中创建记录)

MySQL时间日期查询问题

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - 内部连接与联合所有

sql - 在 SELECT 语句上使用 NOLOCK 的目的是什么?