Я получил этот запрос из своего прежнего приложения, при выполнении которого слишком много времени занимает ответ. Поэтому я планирую разбить этот сложный запрос на несколько запросов и выполнить некоторые операции на стороне приложения, т.е. в более новом приложении.
WITH members AS (
SELECT
shift_group_code,
shift_code,
0 AS isCycle,
CHAR(10) + CAST(shift_group_code AS varchar(max)) + CHAR(10) AS [path]
FROM shift_grouping
WHERE workspace_code IN ('default', 'test', 'test1')
AND shift_group_code = 'WS+DEFAULT'
UNION
ALL
SELECT
H.shift_group_code,
H.shift_code,
CASE
WHEN M.[path] LIKE '%' + CHAR(10) + CAST(H.shift_code AS varchar(max)) + CHAR(10) + '%'
THEN 1
ELSE 0
END AS isCycle,
M.[path] + CAST(H.shift_code AS varchar(max)) + CHAR(10) AS [path]
FROM
shift_grouping H
JOIN
members M
ON H.shift_group_code = M.shift_code
AND M.shift_code IN (SELECT
code
FROM
shift_group)
WHERE
H.workspace_code IN ('default', 'test', 'test1')
AND M.isCycle = 0)
SELECT
*
FROM shift
WHERE
workspace_code IN (
'default', 'test', 'test1'
)
AND (
code = 'WS+DEFAULT'
OR code IN (
SELECT
DISTINCT shift_code
FROM
members
WHERE
isCycle = 0
)
)
Я мог бы разбить первую часть до UNION
т.е.
SELECT shift_group_code, shift_code,
0 AS isCycle,
CHAR(10) + CAST(shift_group_code AS varchar(max)) + CHAR(10) AS [path]
FROM shift_grouping
WHERE workspace_code IN ('default', 'test', 'test1')
AND shift_group_code = 'WS+DEFAULT'
Но вторая часть запроса
SELECT H.shift_group_code, H.shift_code,
CASE
WHEN M.[path] LIKE '%' + CHAR(10) + CAST(H.shift_code AS varchar(max)) + CHAR(10) + '%'
THEN 1
ELSE 0
END AS isCycle,
M.[path] + CAST(H.shift_code AS varchar(max)) + CHAR(10) AS [path]
FROM shift_grouping H
JOIN members M
ON H.shift_group_code = M.shift_code
AND M.shift_code IN (SELECT code FROM shift_group)
WHERE H.workspace_code IN ('default', 'test', 'test1')
Я не смог разорвать, потому что есть оператор JOIN members M
, который не позволяет мне взломать SQL.
members
исходит из оператора WITH members
в начале большего запроса.
Или я не мог понять, как они объединяют members
с shift_grouping
.
Может ли кто-нибудь помочь мне с этим вопросом?