如何对数据库中的多个表进行全局选择?

时间:2013-06-21 19:41:34

标签: mysql sql select

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

1 个答案:

答案 0 :(得分:3)

您可以通过创建您感兴趣的表格的视图来使事情变得更容易:

之类的东西
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_%'