H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”

Posted

技术标签:

【中文标题】H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”【英文标题】:H2 column name select returning incorrect column name; "Column "OUT_ID" not found; SQL statement:" 【发布时间】:2013-02-04 17:21:09 【问题描述】:

我正在使用H2 database,版本“H2 1.3.170 (2012-11-30)”

我有以下 制表符 分隔的文件内容:

in:value1:String    out:id:Int  out:description:String
N/A 0   N/A
Forced Available    1   Forced Available
Forced Not Available    2   Forced Not Available

我正在使用下面的语句来创建一个表:

CREATE TABLE xo_coverage_voip_on_xo_override AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', 'in_value_1' || chr(9) || 'out_id' || chr(9) || 'out_description', 'UTF-8', chr(9));

我尝试将创建的表用于此:

SELECT out_id FROM xo_coverage_voip_on_xo_override;

我收到此错误:

"Column "OUT_ID" not found; SQL statement:"

我哪里错了?

此外,我真的很想在插入前从表中删除第一行。但是,我无法让 WHERE 子句起作用。

如果您能提供任何帮助,我们将不胜感激。

【问题讨论】:

你能试试select "out:id:Int" from xo_coverage_voip_on_xo_override吗? 或者,作为替代方案,使用create table xo_coverage_voip_on_xo_override(in_value1 varchar, out_id int, out_description varchar) as select * from csvread(...),然后使用您使用的查询? @Thomas Mueller:当尝试“SELECT out:id:Int FROM XO_COVERAGE_VOIP_ON_XO_OVERRIDE;”时,我收到此错误:“未找到列“OUT”;SQL 语句:” @Thomas Mueller:尝试“创建表 xo_coverage_voip_on_xo_override1(in_value1 varchar, out_id int, out_description varchar) AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', 'in_value_1' || chr(9) || 'out_id' || chr(9) || 'out_description', 'UTF-8', chr(9));",我得到这个错误:"数据转换错误转换"'out:id :Int' (XO_COVERAGE_VOIP_ON_XO_OVERRIDE1: OUT_ID INT)"; SQL 语句: -- 第 2 行 ('in:value1:String', 'out:id:Int', 'out:description:String') [22018-170] 22018 /22018" 这个错误是有道理的,因为“标题行”不会通过 int 转换。 【参考方案1】:

所以,解决方案最终是这样的声明:

CREATE TABLE xo_coverage_voip_on_xo_override1(in_value1 varchar, out_id int, out_description varchar)
  AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', null, 'UTF-8', chr(9));

关键是让 CSVREAD 查询将数据加载到完全指定的表中。并为标题行提供“null”,以便在文件中跳过它。

【讨论】:

以上是关于H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”的主要内容,如果未能解决你的问题,请参考以下文章

如何定义隐式列名的 H2 语法问题

H2:使用嵌套查询的计数查询中的列名重复

如何使用 csv 文件的列名作为输入选择?

SQL - 如何从多个可能的列名中进行选择?

TypeORM 选择列名的别名

Laravel DB 选择语句。查询返回列名作为结果而不是值