查询时返回带有列的表名

Posted

技术标签:

【中文标题】查询时返回带有列的表名【英文标题】:returning table name with columns when queried 【发布时间】:2015-05-04 14:45:51 【问题描述】:

我正在运行一些包含连接的查询。这些表很大,并且有一些名称相同的列。有没有一种方法可以创建一个查询,该查询会在表名前面加上列名?

我想要...

SELECT * FROM users u LEFT OUTER JOIN favorites f ON u.id = f.userID

让它显示一些类似...的东西

u.id | u.name | u.email ... f.id | f.name ...

不仅仅是

id | name | email ... id | name ...

我喜欢将我的查询作为关联数组处理,因为与编号索引相比,它们更易于阅读,因此当列名不唯一时,这会使事情变得具有挑战性。

【问题讨论】:

我已将 * 替换为带有别名的列列表 - u.id u_id, f.id f_id 等等。如果有人有更自动化的方法,那就太好了。 大多数时候,指定列被认为是最佳实践,以避免索引和绑定问题。此外,它更有效。 唯一的问题,我同意,大多数时候我更喜欢这样做,但这些表每个都有 50 多个字段,所以花时间把每个列名放进去可能会很乏味。 SELECT u.*, f.* FROM ... 会发生什么?客户端语言是什么? 同样的结果,只是列出了没有指示符的列名。不过我也有同样的想法 【参考方案1】:

你需要给你的列加上别名——(如果你想在列名中加上句点,你需要使用双引号):

select u.id as "u.id", 
       u.name as "u.name",
       u.email as "u.email",
       f.id as "f.id",
       f.name as "f.name"
FROM users u LEFT OUTER JOIN favorites f ON u.id = f.userID

【讨论】:

我将此标记为答案,因为除了为您要返回的每个单独字段手动分配字段名称之外,似乎没有其他方法可以做到这一点。

以上是关于查询时返回带有列的表名的主要内容,如果未能解决你的问题,请参考以下文章

返回带有列的表[重复]

Fmdb 选择带有变量表名的查询

如果查询的表名和返回的实体Bean对象不一致,怎么处理?

clojure jdbc postgres:为啥我的查询结果将表名中的 unicode 字符返回为 �?

sql server 2008不用查询语句怎样查看新建的表的信息?像2000中的企业管理器中有个返回所有列一样

更新 Sequelize 模型时,失败并返回与我提供的不同的表名?