SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird

Posted

技术标签:

【中文标题】SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird【英文标题】:Column aliasing in SELECT statements doesn't work with SQuirrel SQL + Firebird 【发布时间】:2012-09-24 11:00:59 【问题描述】:

我尝试使用 SQuirrel SQL 3.4 + Firebird 1.5 + Driver JDBC Jaybird 2.2.[0|1] (JVM 1.7.0_03) 在 SELECT 语句中添加列别名,但不起作用。别名列显示为列的原始名称。在另一个工具 (DBExpert) 中,同样的语句可以正常工作。

声明SELECT column1 AS alias1, column2 FROM table;SquirrelSQL 中的结果列名称column1 - column2DBExpert 中的结果列名称alias1 - column2

尝试在别名周围添加 ' 和 ",但也不起作用。

有人有想法吗?

编辑:我将 JDBC Jaybird 驱动程序更新到 2.2.1 版本(9 月 30 日发布),问题仍然存在。

编辑 2:问题已解决!

问题是由 Squirrel SQL 的默认首选项引起的。

要修复它,请转到“文件”->“全局首选项”,在“数据类型控件”选项卡中找到“常规(适用于所有类型)”并标记组合框“使用列标签而不是列名在结果标题中”。

见截图:http://i1-win.softpedia-static.com/screenshots/SQuirrel-SQL-Client_4.png?1345342622

享受吧。

【问题讨论】:

问题已修复。请参阅问题“编辑 2”。 【参考方案1】:

在 Squirrel 中,需要在以下位置进行设置:

文件 > 全局首选项 > 数据类型控件 > 检查:使用列标签 而不是结果标题中的列名

【讨论】:

这对我有用!【参考方案2】:

问题是由于 JDBC 规范中的混淆(至少从历史上看)以及 Jaybird 在结果集元数据中报告为 columnNames 和 columnLabels 的内容方面发生了变化。据我所知,在 JDBC 2.0 和更早版本中,columnName 和 columnLabel 之间的区别没有明确定义,因此在几乎所有情况下,getColumnName() 返回的值都与getColumnLabel() 相同(即,如果指定了 AS 别名)。

使用 JDBC 3.0 进行了更清晰的区分:columnName 是表中基础列的名称(如果有),columnLabel 是 AS 别名(如果指定),否则 columnName . Jaybird 2.1.6 及更早版本过去常常为 getColumnLabel()getColumnName()(即 columnLabel)返回相同的值,这在 Jaybird 2.2 中已更改。

显然 Squirrel 默认使用不符合 JDBC 的选项 columnName,而不是 columnLabel。正如您已经发现的那样:有一个选项可以让它使用columnLabel。另一个选择是使用 Jaybird 2.2.1 或更高版本并添加连接属性 columnLabelForName=true

【讨论】:

你的解释很有启发性。谢谢!

以上是关于SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird的主要内容,如果未能解决你的问题,请参考以下文章

INSERT + SELECT + ON DUPLICATE KEY 与 SELECT 子句中的列别名

SQL查询

SQL - 如果存在不适用于 Select 语句?

SQL语句中,子句不能使用列别名问题

Group by 语句不适用于 Select Case

MySQL 查询适用于 SELECT 但不适用于 UPDATE 语句