如果在其他地方已经回答了这个问题我会道歉(这个主题必须有一些内容),但我似乎无法找到对我的问题的简明回答。
我对SQL比较陌生,当我使用它时,我只使用了基本语句。现在我正在使用一个非常大的数据库(在Oracle中),并被要求在开发方面进行一些探索,以便更熟悉。
发送给我探索数据库的一个问题涉及查找与特定用户关联的“运行控件”列表。
有一个表可以跟踪通过标题为run_cntl_id
的字段存在的不同类型的“运行控件”。此表中有18行与特定用户相关联,每行都有唯一的run_cntl_id
。对于run_cntl_id
字段中的每个值,至少有一个具有多行的对应表(非常标准的数据库内容)。不幸的是,我没有任何参考资料来显示表格关系。
有不到3,000个表包含oprid
(用户标识符)和run_cntl_id
(“运行控制”类型)字段(当它们分开时,有3,100个表其中包含run_cntl_id
字段,以及包含oprid
字段的8,800字段。数据库中总共有大约65,000个表。有没有办法搜索这3,000个表格中的特定operid
和run_cntl_id
?
如果我想在一个表上执行此查询,我将使用以下语句:
SELECT *
FROM PS_JRNL_COPY_REQ
WHERE oprid = 'jle0010'
AND run_cntl_id = 'Copy_Jrnl';
重新解释这个问题:
有没有办法在上面提到的3,000个表上执行此语句而不运行单个语句3,000次?
答案 0 :(得分:1)
如果所有3,000个表都具有相同的列,那么您的查询将如下所示:
SELECT *
FROM (
select * from PS_JRNL_COPY_REQ union all
select * from other_table_1 union all
select * from other_table_2 union all
... and so on for 2,997 more)
WHERE oprid = 'jle0010'
AND run_cntl_id = 'Copy_Jrnl';
无法保证解析或运行。
您可以通过查询user_tables来构建该内联视图。