#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