如何在PostgreSQL中用player.*获取元组形式的查询结果?
问题原因与解决方法
为什么两种写法结果不同?
- 第一种写法
(player.id, player.firstname, player.lastname)是显式构造行元组:SQL里用括号把多个字段括起来时,会生成一个复合类型的单列,所有字段值会被打包成元组形式返回,所以结果集只有player这一列。 - 第二种写法
(player.*)里的括号是冗余的:SQL解析器会直接忽略这个括号,player.*的作用是展开player表的所有字段,最终返回拆分后的多个独立列,而非元组。
如何用player.*获取元组形式结果?
需要用行构造函数把player.*包裹起来,强制将所有字段打包成元组,不同数据库的语法大致如下:
通用写法(适配多数数据库)
SELECT ROW(player.*) AS player FROM player
PostgreSQL 专属简洁写法
PostgreSQL支持直接用表名代表整行记录,可简化为:
SELECT player AS player FROM player
执行后就能得到和第一种写法一致的元组形式结果:
+----------------+ | player | +----------------+ | (1,Bob,Smith) | +----------------+ | (2,John,Smith) | +----------------+
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

