0

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

4

1 回答 1

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_%'
于 2013-06-21T19:50:03.473 回答