我的查询结构类似于下面的
SELECT blah
FROM A, B, C
WHERE $SOME_COMMON_IF_AND
AND $SPECIFIC_1
UNION
SELECT blah
FROM A, B, C, D
WHERE $SOME_COMMON_IF_AND
AND $SPECIFIC_2
UNION
...
在尝试减少查询时间时,我试图去除$ SOME_COMMON_IF_AND部分并将其作为视图投影,并让SELECT子句将此视图用作基线。
我似乎无法弄清楚这样做的正确语法,有什么建议吗?
提前致谢!
---为更多信息而编辑---
例如:
(SELECT blah
FROM A, B, C
WHERE $SOME_COMMON_IF_AND)
AS WORK_TABLE_1
%$@#%$@# -- the missing link
SELECT blah
FROM WORK_TABLE_1
WHERE $SPECIFIC_1
UNION
SELECT blah
FROM WORK_TABLE_1
WHERE $SPECIFIC_2
UNION
....
这是在DB2上,但我正在寻找一般的SQL解决方案,原始查询是一个野兽(1000行+),因此我抽象出WHERE子句。如果需要进一步澄清,请告诉我。
答案 0 :(得分:2)
您正在寻找的是一个公用表表达式。这就像有一个内联视图:
with
work_table_1 as (
SELECT blah
FROM A, B, C
WHERE $SOME_COMMON_IF_AND
)
SELECT blah
FROM WORK_TABLE_1
WHERE $SPECIFIC_1
UNION
SELECT blah
FROM WORK_TABLE_1
WHERE $SPECIFIC_2