Рекурсивная оптимизация CTE для подключений документов по цепочке поставок/цепочка/иерархияMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 Рекурсивная оптимизация CTE для подключений документов по цепочке поставок/цепочка/иерархия

Сообщение Anonymous »

Это хороший способ получить все соединения документов? Будет ли это работать на миллиарды строк?
Преобразовать его в заказ на получение товара < /li>
Прекращение в квитанцию ​​о товарах < /li>
Конвертировать заказ на покупку в оценку < /li>
Добавить затраты в оценку < /li>
< /ol>

Код: Выделить всё

PURCHASING_ORDER > GOODS_RECEIPT_ORDER > GOODS_RECEIPT
PURCHASING_ORDER > PURCHASING_VALUATION
PURCHASING_COST > PURCHASING_VALUATION
Соединения представлены в utils_documentconnection таблице, как это:

Логика заключается в том, что менее важный документ связан с более важным, чтобы CTE работал. < /p>
Вот cte: < /p>

Код: Выделить всё

set @documentType = 'PURCHASING_ORDER';
set @documentId = 1;

WITH RECURSIVE
DocumentChainDown AS (
SELECT
documentTypeIdTo documentTypeId,
documentIdTo documentId,
documentTypeIdFrom connectedDocumentTypeId,
documentIdFrom connectedDocumentId
FROM utils_documentConnection
WHERE
documentTypeIdTo = (select id from system_documentType where documentType = @documentType)
AND documentIdTo = @documentId

UNION ALL

SELECT
d.documentTypeIdTo,
d.documentIdTo,
d.documentTypeIdFrom,
d.documentIdFrom
FROM utils_documentConnection d
INNER JOIN DocumentChainDown dc ON
d.documentTypeIdTo = dc.connectedDocumentTypeId
AND d.documentIdTo = dc.connectedDocumentId
),
DocumentChainUp AS (
SELECT
documentTypeIdFrom documentTypeId,
documentIdFrom documentId,
documentTypeIdTo connectedDocumentTypeId,
documentIdTo connectedDocumentId
FROM utils_documentConnection
WHERE
documentTypeIdFrom = (select id from system_documentType where documentType = @documentType)
AND documentIdFrom = @documentId

UNION ALL

SELECT
d.documentTypeIdFrom,
d.documentIdFrom,
d.documentTypeIdTo,
d.documentIdTo
FROM utils_documentConnection d
INNER JOIN DocumentChainUp dc ON
d.documentTypeIdFrom = dc.connectedDocumentTypeId
AND d.documentIdFrom = dc.connectedDocumentId
)
select DocumentChain.*, dtt.documentType
from (
SELECT 'down', dcd.* FROM DocumentChainDown dcd
union all
SELECT 'up', dcu.* FROM DocumentChainUp dcu
) DocumentChain
join system_documentType dtt on dtt.id = DocumentChain.connectedDocumentTypeId
CTE приводит к этому, то есть все документы, связанные с покупкой using_order :

для set @documenttype = 'booksing_valuation'; , мы получаем это:


Подробнее здесь: https://stackoverflow.com/questions/794 ... -hierarchy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «MySql»