如何在 CTE 或子查询中引用 DISTINCT 列名?
How to reference DISTINCT column names in a CTE or subquery?
我需要从 table 生成唯一列对列表,但 Postgres 似乎不喜欢我的方法。
我的 CTE 方法:
WITH cte AS (
SELECT DISTINCT(col1, col2)
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
)
SELECT json_build_object('col1', cte.col1, 'col2', cte.col2)
FROM cte;
给我这个错误:
ERROR: column cte.col1 does not exist
LINE 8: SELECT
json_build_object('col1', cte.col1, 'col2...
我也尝试了子查询:
SELECT json_build_object('col1', col1, 'col2', col2)
FROM (
SELECT DISTINCT(col1, col2)
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
) AS temp;
失败的方式基本相同:
ERROR: column "col1" does not exist
LINE 1: SELECT
json_build_object('col1', col1, 'col2...
由于 DISTINCT
,我似乎无法正常引用列名。我应该怎么做?
您错误地使用了括号。 DISTINCT
是 不是 函数。
括号被解释为 row constructor,因此您的 CTE returns 只有一个 record
类型的值(并且名称由数据库选择)。
去掉括号,一切都会好起来的。
撇开放错地方的括号不谈,因为无论如何都要在子查询中准备相关列,所以只需在外部 SELECT
:
中使用更简单的 to_json()
SELECT to_json(temp)
FROM (
SELECT DISTINCT col1, col2
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
) temp;
我需要从 table 生成唯一列对列表,但 Postgres 似乎不喜欢我的方法。
我的 CTE 方法:
WITH cte AS (
SELECT DISTINCT(col1, col2)
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
)
SELECT json_build_object('col1', cte.col1, 'col2', cte.col2)
FROM cte;
给我这个错误:
ERROR: column cte.col1 does not exist
LINE 8: SELECT json_build_object('col1', cte.col1, 'col2...
我也尝试了子查询:
SELECT json_build_object('col1', col1, 'col2', col2)
FROM (
SELECT DISTINCT(col1, col2)
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
) AS temp;
失败的方式基本相同:
ERROR: column "col1" does not exist
LINE 1: SELECT json_build_object('col1', col1, 'col2...
由于 DISTINCT
,我似乎无法正常引用列名。我应该怎么做?
您错误地使用了括号。 DISTINCT
是 不是 函数。
括号被解释为 row constructor,因此您的 CTE returns 只有一个 record
类型的值(并且名称由数据库选择)。
去掉括号,一切都会好起来的。
撇开放错地方的括号不谈,因为无论如何都要在子查询中准备相关列,所以只需在外部 SELECT
:
to_json()
SELECT to_json(temp)
FROM (
SELECT DISTINCT col1, col2
FROM table1
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
) temp;