我正在尝试编写动态查询。我已经尽力简化了。 middleware two
和@Condition
是查询的动态输入。
有两种情况:
@Filter
是@Condition
,则不要在存在任何TRUE
的情况下过滤data
metadata
行,并在这些行上过滤metadata
。 伪代码有点像这样:
data
我认为没有CTE可能会有更简便的方法,但是由于查询在现实生活中的外观,我认为我需要将其拆分以最大程度地减少复杂性。
答案 0 :(得分:1)
我认为您可以尝试将条件设置在哪里,而不是直接在CTE中设置。
SELECT
*
FROM data
WHERE
(
-- Ignore the metadata filter
@Condition = TRUE
OR
-- Filter on metadata
@Condition = FALSE AND data.metadataid IN (SELECT ID FROM selected_metadata AND field = @Filter)
)
...more filters
答案 1 :(得分:0)
尝试这样的事情:
WITH selected_metadata AS (
-- Find the matching metadata rows
SELECT id FROM metadata WHERE field = @Filter OR @Condition <> TRUE
)
SELECT ...