Коррелированный подзапрос SQL - PullRequest
0 голосов
/ 10 октября 2018

In the following picture showing two tables and a SQL query.

Вопрос об этом задании: каков будет результат запроса?

Я знаю ответ, но не совсем понимаю, как работает запрос SQLособенно в строке, которую я пометил знаком ответа.

До сих пор я понял, что сначала мы объединяем две таблицы из подзапроса

SQL-запрос:

select Count(*)  
from OrderDetails as OD 
inner join [Order] as O on OD.idOrder = O.id  
where SalePrice = all (select Price  
                       from OrderDetails 
                       inner join [Order] on OrderDetails.idOrder = [Order].id  
                       where idCustomer != O.idCustomer 
                         and OrderDetails.idProduct = OD.idProduct)

1 Ответ

0 голосов
/ 10 октября 2018

В качестве логического описания сначала следует развернуть объединение, так как оно используется как внешним запросом, так и подзапросом.

enter image description here

Первая строка на изображении выше имеет idCustomer из 1 и idProduct из 1.Подзапрос ищет все строки с одним и тем же идентификатором продукта и разными значениями.Для первой строки есть две строки, соответствующие этой комбинации (выделены желтым цветом в обоих столбцах).Это столбцы с Price, выделенными красным цветом ниже.

enter image description here

Столбец SalePrice из внешней строки имеет значение 1.Это то же самое, что и все Price значения, выделенные красным цветом (то есть ни одно из них не имеет другого значения), поэтому первая внешняя строка соответствует предикату = ALL и вносит вклад в подсчет.

Тот же процессповторяется для остальных 9 строк, возвращаемых объединением.

...