Я пытаюсь написать динамический запрос.Я пытался упростить это как можно лучше.@Condition
и @Filter
- динамические входные данные запроса.
Существует два случая:
- Если
@Condition
равно TRUE
, то не фильтруйте data
при наличии любого metadata
- В противном случае найдите строки
metadata
, которые соответствуют определенному фильтру, и отфильтруйте data
по ним.
Псевдокод выглядит примерно так:
WITH selected_metadata AS (
IF (@Condition = TRUE) {
-- Do not filter on metadata
SELECT NULL;
}
ELSE {
-- Find the matching metadata rows
SELECT id FROM metadata WHERE field = @Filter
}
)
SELECT
*
FROM data
WHERE
(
-- Ignore the metadata filter
selected_metadata IS NULL
OR
-- Filter on metadata
data.metadataid IN (selected_metadata)
)
...more filters
Я думаю, что могут быть более простые способы сделать это без CTE, но из-за того, как запрос выглядит в реальной жизни.Я думаю, мне нужно разделить его, чтобы минимизировать сложность.