在单个语句中从前缀为ALL的表中减去前缀为USER的所有oracle表

时间:2019-01-04 12:55:40

标签: sql oracle

测试我找不到答案的问题。

因此,我安装了Oracle DB,并且其中包含许多带有 USER ALL 前缀的表。

我如何在 Single 语句中减去前缀为'ALL'的表的数量  从带有前缀“ USER”的表数量开始?

有〜378个'USER'表和〜330个'ALL'表。所以我应该在48左右得到答案。

请帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

使用视图 ALL_TABLES或视图DICT

SELECT al.cnt - us.cnt
FROM 
    (SELECT COUNT(*) cnt FROM all_tables WHERE table_name like 'ALL%') al,
    (SELECT COUNT(*) cnt FROM all_tables WHERE table_name like 'USER%') us

或:

SELECT al.cnt - us.cnt
FROM 
    (SELECT COUNT(*) cnt FROM dict WHERE table_name like 'ALL%') al,
    (SELECT COUNT(*) cnt FROM dict WHERE table_name like 'USER%') us

请注意,这将列出所有模式中的表。您可能想使用列OWNER限制为特定的架构。

答案 1 :(得分:1)

使用条件COUNT并仅过滤where子句中需要的表(可选,但有效)。

SELECT COUNT(CASE WHEN table_name like 'ALL%'  THEN 1 END) - COUNT(
             CASE WHEN table_name like 'USER%' THEN 1 END) as diff
   FROM all_tables 
WHERE  table_name LIKE 'ALL%' OR table_name LIKE 'USER%';