PostgreSQL的:使用子查询的缩写( 'AS')在WHERE子句中
问题描述:
考虑PostgreSQL的以下查询:PostgreSQL的:使用子查询的缩写( 'AS')在WHERE子句中
SELECT
a, b,
(A VERY LONG AND COMPLICATED SUBQUERY) AS c,
(ANOTHER VERY LONG AND COMPLICATED SUBQUERY) AS d
FROM table
我想有WHERE
子句中c
和d
,如:
WHERE c AND d;
但是,据我所知,我只能这样做:
WHERE A VERY LONG AND COMPLICATED SUBQUERY) AND
(ANOTHER VERY LONG AND COMPLICATED SUBQUERY)
哪个笨拙,代码复制,breaking the single-choice principle和完全丑陋。
顺便说一句,同样的问题适用于SELECT
子句:我无法对以前定义的子查询使用缩写。
答
你可以使用子查询:
SELECT a,b,c,d FROM
(SELECT
a, b,
(A VERY LONG AND COMPLICATED SUBQUERY) AS c,
(ANOTHER VERY LONG AND COMPLICATED SUBQUERY) AS d
FROM table
) AS T1
WHERE c AND d
你也可以用CTE做到这一点。
工作。任何想法为什么更合理的语法不适用于PostgreSQL环境? – 2010-01-27 10:43:18
对WHERE子句的评估在逻辑上优先于 SELECT列表的评估,所以期望SELECT输出 在WHERE中可用真的很无意义。 http://archives.postgresql.org/pgsql-general/2002-11/msg01411.php – 2010-01-27 10:46:22
@Adam:我添加了另一个替代方案(CTEs)给我的答案。你也应该检查一下HAVING子句(它在Gerard的链接中也有提到)。 – 2010-01-27 10:54:41