测试我找不到答案的问题。
因此,我安装了Oracle DB,并且其中包含许多带有 USER 和 ALL 前缀的表。
我如何在 Single 语句中减去前缀为'ALL'的表的数量 从带有前缀“ USER”的表数量开始?
有〜378个'USER'表和〜330个'ALL'表。所以我应该在48左右得到答案。
请帮助。谢谢。
答案 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%';