这只是一个 SSCCE:
CREATE TABLE test(i INTEGER NOT NULL);
WITH max_i AS (SELECT MAX(i) FROM test)
SELECT * FROM test WHERE max_i - i < 2 AND max_i!=i
PostgreSQL 抱怨:
ERROR: column "max_i" does not exist
我想那是因为max_i
是单个值而不是行集,但是如何在通过复杂查询获得的查询值中仅定义一次,而不必在使用子查询时重复子查询?
首先,您不需要同时满足这两个条件WHERE
条款。这i = max_id - 1
就足够了(如果有效的话。)
要使用 CTE 中的值,您必须使用(交叉)连接作为其他答案,或者使用以下(不太常见)语法:
WITH max_i AS
( SELECT MAX(i) FROM test )
SELECT *
FROM test
WHERE i = (TABLE max_i) - 1 ;
Test at SQL-Fiddle http://sqlfiddle.com/#!15/88f6b/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)