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