在我的工作中,我们有许多存储客户信息的表。每个客户端都有一个单独的 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 并获得单个结果。我们正在使用的联合技术有效,但我想知道是否有办法更快地做到这一点。
编辑 - 参数可能是答案,但这些不是存储过程
您的问题中缺少很多信息,但此查询将为您生成 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]'