Когда есть коррелированный запрос, какова последовательность выполнения?Последовательность выполнения запроса
Ex:
select
p.productNo,
(
select count(distinct concat(bom.detailpart,bom.groupname))
from dl_MBOM bom
where bom.DetailPart=p.ProductNo
) cnt1
from dm_product p
Я хотел бы знать, как будет работать внутренний запрос. Чтобы внутренний запрос работал, он должен ссылаться на таблицу из внутреннего запроса. – Kaushik
Да. Мы читаем одну запись из 'dm_product'. Мы берем его 'ProductNo' и собираем все записи' dl_MBOM' с помощью этого 'DetailPart'. Теперь у нас есть массив строк, состоящий из 'detailpart' +' groupname'. Мы сканируем его и подсчитываем (каждая уникальная строка только один раз). Теперь у нас есть первая строка результата. Мы читаем следующую запись из 'dm_product' и т. Д. –
... Только то, что мы могли бы переписать весь запрос таким образом, чтобы внешнее соединение объединялось в список агрегатов' dl_MBOM'. Идея здесь состоит в том, что мы сначала читаем таблицу 'dl_MBOM' и получаем разные значения для' DetailPart'. Тогда мы могли бы сделать так, как указано выше, только чтобы мы просмотрели наши предварительно агрегированные записи на запись 'dm_product'. Но мы могли бы просто прочитать эту промежуточную таблицу и поместить ее записи в хэш-ведра. Затем мы читаем таблицу 'dm_product' и помещаем ее записи в ведра. И затем мы посмотрим на ведра, чтобы добраться до наших результирующих записей. То же самое, но совершенно другой план выполнения. –