Вычтите все таблицы оракула с префиксом USER из таблиц с префиксом ALL в одном выражении - PullRequest
0 голосов
/ 04 января 2019

Тестовый вопрос, на который я не могу найти ответ.

Итак, у меня установлена ​​Oracle DB, и она содержит множество таблиц с префиксами USER и ALL .

КАК я могу в Single вычесть количество таблиц с префиксом 'ALL' Из количества таблиц с префиксом 'USER'?

Существует ~ 378 таблиц 'USER' и ~ 330 таблиц 'ALL'. Поэтому я должен получить ответ где-то около 48.

Пожалуйста, помогите. Thanx.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Используйте условное 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%';
0 голосов
/ 04 января 2019

Используйте представление 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...