Как работает вычитание двух инструкций select SQL?

#sql #oracle11g

#sql #oracle11g

Вопрос:

У меня есть две таблицы: покупка и продажа. Приведенный ниже запрос выдает разницу между ‘pqty’ и ‘sqty’

Кто-нибудь может объяснить, как работает приведенный ниже запрос? Что хранится в X, Y? Пожалуйста, обратитесь к ссылке для вывода запросов select. Запросы Select для двух таблиц

 select X.totalpqty - Y.totalsqty

from 

(select sum(pqty) as totalpqty from purchase where wasteid = 2)X, 

(select sum(sqty) as totalsqty from sale where recyclerid = 102001)Y;
  

Комментарии:

1. Чего вы пытаетесь здесь достичь? Можете ли вы опубликовать некоторые примеры входных данных и желаемый результат, чтобы я мог попытаться помочь вам..

2. Не могли бы вы, пожалуйста, обратиться к ссылке в вопросе. Он выводит инструкции select. Мне нужна помощь в понимании того, как работает приведенный выше запрос. Что хранится в X,Y.

Ответ №1:

Данный запрос создает 2 таблицы «на лету»:

Первая таблица «на лету» X:

 select sum(pqty) as totalpqty from purchase where wasteid = 2
  

Создает table X только с одним значением: totalpqty как сумма значений pqty, которые имеют wasteid=2 .

Вторая таблица «на лету» Y:

 select sum(sqty) as totalsqty from sale where recyclerid = 102001
  

Создает table Y только с одним значением: totalsqty , как сумма sqty, которые имеют recyclerid=102001 .

Эти 2 таблицы (X и Y) не объединяются, потому что в этом нет необходимости, поскольку каждая из них возвращает только одно значение. Декартово произведение представляет собой всего лишь одну строку с 2 столбцами:

  • сумма значений pqty
  • сумма значений sqty

Наконец, основной запрос получает 2 значения, которые возвращаются двумя подзапросами, и выполняет фактическое вычитание, которое необходимо ( X.totalpqty - Y.totalsqty ).

Комментарии:

1. Существует ли какой-либо официальный термин для этого процесса, такой как join или объединение?

2. Я бы сказал, что это просто сокращенная версия вызова 2 агрегатов. В качестве альтернативы, чтобы получить тот же результат, вы должны выполнить два запроса один за другим, сохраняя возвращаемые значения в переменных, и вы должны выполнить вычитание для переменных.

Ответ №2:

X и y — это псевдоним результата двух подзапросов, которые имеют два столбца totalpqty totalsqty