在我的工作中,我们有许多存储客户信息的表。每个客户都有一个个人ID号。我们用于命名表的约定是字母前缀,然后是ID。为了完成我的工作并处理出现的问题,我们当前必须在excel中编写一个SQL语句,并将ID作为单元格引用,无论我们需要使用哪个ID(例如构造FROM子句)。有什么办法可以一次编写查询并将ID后缀换成单个查询吗?目前的方法是使用一系列联合。 where子句和选择在查询(通常)上都是相同的,唯一的区别是FROM和任何后续连接上的ID,以及可能的静态字段,用于跟踪哪些表/帐户的各个数据行来自哪些。
表格采用如下形式:
Select * from "some letter"101 Limit 1
Select * from "some other letter"101 limit 1
Select * from "some other letter"101 limit 1
Select * from "some other letter"101 limit 1
etc...
所以查询可能如下所示:
SELECT '100' as id, field, field, field, field
FROM D100 where field between 'xxxxx' AND 'xxxx' AND field = 'xxxx' AND field= 'xxxx' union
SELECT '102' as id, field, field, field, field
FROM D102 where field between 'xxxx' AND 'xxxx' AND field = 'xxxxx' AND field = 'xxxxx' union
SELECT '103' as id, field, field, field, field
FROM D103 where field between 'xxxxx' AND 'xxxxxx' AND field = 'XXXX' AND field = 'XXXXX' union ....
我几乎从不需要查询每个表,通常我有一个我需要检查的ID列表,所以理想情况下我只需要为单个查询提供一个列表,该列表将自动交换所需的ID。
有更好的方法吗?缺乏数据是一项安全预防措施
另外,我没有对此数据库的写访问权限,只能读取。
详细说明,每个客户端都有许多表,并且有大量客户端,这些表由前缀字母标识,前缀字母指定其包含的数据,后跟客户端ID。通常,工作请求将进入,我所拥有的只是一个ID列表。我办公室里的每个人接近它的当前方式是使用连接在excel中构建查询,我正在寻找一种方法来只有一个查询但不重复每个表的整个查询以及我感兴趣的ID并得到一个单一结果。我们正在使用的联合技术有效,但我想知道是否有办法更快地完成这项工作。
编辑 - 参数可能是答案,但这些不是存储过程
答案 0 :(得分:0)
您的问题中缺少相当多的信息,但此查询将为您生成SQL:
select 'select * from ' + table_name + ' where field between ''xx'' and ''xx'''
from information_schema.tables
where table_name like '[a-z][0-9][0-9][0-9]'