Oracle выбирает строки из запроса, которых нет в другом запросе - PullRequest
2 голосов
/ 14 апреля 2019

Позвольте мне объяснить вопрос.

У меня есть две таблицы, в которых есть 3 столбца с одинаковыми типами данных. Эти 3 столбца создают ключ / ID, если хотите, но имена столбцов в таблицах отличаются. Сейчас я создаю запросы с этими 3 столбцами для обеих таблиц. Мне удалось самостоятельно получить эти результаты

Например:

SELECT ID, FirstColumn, sum(SecondColumn)
    FROM (SELECT ABC||DEF||GHI AS ID, FirstTable.* 
            FROM FirstTable
            WHERE ThirdColumn = *1st condition*)
GROUP BY ID, FirstColumn
;

SELECT ID, SomeColumn, sum(AnotherColumn)
    FROM (SELECT JKM||OPQ||RST AS ID, SecondTable.* 
            FROM SecondTable 
            WHERE AlsoSomeColumn  = *2nd condition*)
GROUP BY ID, SomeColumn
;

Поэтому я делаю очень похожие запросы для двух разных таблиц. Я знаю, что в результатах есть определенное количество одинаковых строк с атрибутом ID, которое я только что создал в запросах. Мне нужно проверить, какие строки в результате отсутствуют в результатах другого запроса, и наоборот.

Нужно ли создавать временные таблицы или представления из запросов? Может быть, объединить две таблицы определенным образом и выполнить только один запрос к ним?

Как новичок, у меня нет опыта использования результатов в качестве входных данных для следующего запроса. Мне интересно, какой самый чистый, самый элегантный способ сделать это.

1 Ответ

3 голосов
/ 14 апреля 2019

Нет, вам, скорее всего, не нужны "временные" таблицы. С помощью факторинга WITH поможет.

Вот пример:

with 
first_query as
  (select id, first_column, ...
     from (select ABC||DEF||GHI as id, ...)
  ),
second_query as
  (select id, some_column, ...
     from (select JKM||OPQ||RST as id, ...)
  )
select id from first_query
minus
select id from second_query;

Для другого результата вы просто переключите таблицы, например

with ... <the same as above>
select id from second_query
minus
select id from first_query
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...