有没有一种方法可以在子表中按所有列进行分组,而无需枚举所有列?例如,假设我想查询如下内容:
SELECT t1.col_1, t1.col_2, ... , t1.col_n, t2.col_k, COUNT(*)
FROM t1, t2
WHERE t2.col1>0
AND t2.col1=t1.col1
GROUP BY t1.col_1, t1.col_2, ... , t1.col_n, t2.col_k
如果n
很大,写出所有这些列名(而且 * 两次 *)是冗长的。我想知道是否有一个标准的语言结构来做到这一点。例如,关键字COLUMNS
的用法如下:
SELECT COLUMNS(t1), t2.col_k, COUNT(*)
FROM ...
...
GROUP BY COLUMNS(t1), t2.col_k
(Tag包含在Postgres中,因为如果没有SQL标准存在,我对Postgres解决方案感兴趣。
1条答案
按热度按时间6xfqseft1#
您可以在
SELECT
列表中使用t1.*
。它扩展到t1
的所有列。完全符合你的要求。在
GROUP BY
列表中不允许使用相同的语法t1.*
。但是您可以将t1
的primary key列放在那里,以覆盖同一个表的所有列。几乎是你所要求的。这从Postgres 9.1开始工作,并符合标准SQL。参见:
SQL标准允许以类似的方式覆盖更多的函数依赖关系(如
UNIQUE
列),但这在Postgres中没有实现。