Mar*_*tus 1 sql postgresql common-table-expression
这只是一个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
Run Code Online (Sandbox Code Playgroud)
PostgreSQL抱怨:
ERROR: column "max_i" does not exist
Run Code Online (Sandbox Code Playgroud)
我想这是因为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 ;
Run Code Online (Sandbox Code Playgroud)
在SQL-Fiddle上测试
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |