为什么这是一个有效的查询
SELECT T.A FROM
(SELECT A, B
FROM test) T ;
和此:
(SELECT DISTINCT(A,B)
FROM test);
但不是这样:
SELECT T.A FROM
(SELECT DISTINCT(A, B)
FROM test) T ;
(特别是在postgresql中,但我也怀疑其他sql)?
更新:
Postgres失败了:
ERROR: column t.a does not exist
LINE 1: SELECT T.A FROM
将查询更改为
SELECT T.A FROM
(SELECT DISTINCT A, B
FROM test) T ;
成功,
SELECT T.A FROM
(SELECT DISTINCT (A, B)
FROM test) T ;
失败。为什么呢?
答案 0 :(得分:4)
执行此操作时:
SELECT T.A FROM
(SELECT DISTINCT(A, B)
FROM test) T ;
您的(A,B)
语法导致该返回为record
数据类型。因此,您的子查询(T)会看到匿名记录的行返回,而不是单个字段A和B.
如果没有括号,它们将被视为普通字段,这似乎是您想要的。
答案 1 :(得分:-1)
您必须从子查询中指定别名,否则无法从您的第一个seq查询中识别列名...
SELECT T.A FROM
(SELECT DISTINCT(A, B) AS A
FROM test) T ;