从两个没有公共字段的表中提取数据

Data extraction from two tables with no common field

通过登录到我的 Oracle 模式产品,我 运行 通过以下两个查询来获取所需的详细信息:

Query-1:查找 PRODUCT 架构中开始日期早于 2020 年 11 月 1 日的所有 session 数字。

select SESSION_NO, SESSION_BEG
  from APP_SESSION
  where SESSION_BEG < to_date('2020-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
  order by SESSION_BEG; 

Query-2:在 PRODUCT 模式中查找所有 table 及其大小,其中 table 名称由 Session 数字 357924160 这是一个 Session 我从 Query-1 输出中得到的许多数字。

select SEGMENT_NAME,
       BYTES/1024/1024 as "SIZE in MB"
  from USER_SEGMENTS
  where SEGMENT_TYPE='TABLE' and
        SEGMENT_NAME like '%357924160%'
  order by "SIZE in MB" desc;

因为 table 和 USER_SEGMENTS 和 APP_SESSION 这两个 table 之间没有公共列,并且 Query-1 输出中有很多 Session 数字(以千为单位)要检查,我必须为每个 Session 号码一次又一次地 运行 Query-2。

我想知道 Oracle 中是否有任何方法可以将 query-1 和 query-2 连接在一起,以找到大小为 table 的所有 tables,其中 table 名称包含Session 开始日期早于 2020 年 11 月 1 日的数字?

您可以执行以下操作:

select ap.SESSION_NO,
       ap.SESSION_BEG,
       us.SEGMENT_NAME,
       us.BYTES/1024/1024 AS "SIZE in MB"
  from APP_SESSION ap
  INNER JOIN USER_SEGMENTS us
    ON us.SEGMENT_TYPE = 'TABLE' AND
       us.SEGMENT_NAME LIKE '%' || ap.SESSION_NO || '%'
  where ap.SESSION_BEG < to_date('2020-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
  order by ap.SESSION_BEG,
           "SIZE in MB"

你可以试试这个:

select SEGMENT_NAME,
       BYTES/1024/1024 as "SIZE in MB" 
from USER_SEGMENTS, APP_SESSION
where SEGMENT_TYPE='TABLE' and
      SESSION_BEG < to_date('2020-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and 
      SEGMENT_NAME like '%' || SESSION_NO || '%'
order by "SIZE in MB" desc;