sql - 如何在HSQLDB中使用多行SELECT语句导出数据?

标签 sql database hsqldb

当我在 HSQLDB 2.2.5 中使用命令“java -jar sqltool.jar --rcFile sqltool.rc db_file q.sql”运行以下脚本时,我收到错误消息:“用户缺少权限或找不到对象: 选择”。如果我将 \x 命令设为单行语句,HSQLDB 将成功执行脚本。我想将我的 \x 分成多行以提高可读性。如何在 HSQLDB 脚本中使用多行 \x 命令?

--q.sql
DROP TABLE "PUBLIC"."TABLE1" IF EXISTS;

CREATE TABLE "PUBLIC"."TABLE1" (
  "C1" VARCHAR(10),
  "C2" VARCHAR(10),
  "C3" VARCHAR(10)
);

INSERT INTO "PUBLIC"."TABLE1" ("C1", "C2", "C3") VALUES ('a', 'b', 'c');
INSERT INTO "PUBLIC"."TABLE1" ("C1", "C2", "C3") VALUES ('d', 'e', 'f');

DROP TABLE "PUBLIC"."TABLE2" IF EXISTS;

CREATE TABLE "PUBLIC"."TABLE2" (
  "C1" VARCHAR(10),
  "C2" VARCHAR(10)
);

INSERT INTO "PUBLIC"."TABLE2" ("C1", "C2") VALUES ('a', 'b');
INSERT INTO "PUBLIC"."TABLE2" ("C1", "C2") VALUES ('u', 'v');

* *DSV_COL_DELIM=,
* *DSV_ROW_DELIM=\n
* *DSV_TARGET_FILE=results.csv

\x SELECT
( SELECT TOP 1 "T2"."C1" FROM "PUBLIC"."TABLE2" "T2" WHERE "T2"."C1" = "T1"."C1") AS "T2C1",
"T1"."C2" AS "T1C2"
FROM "PUBLIC"."TABLE1" "T1"
ORDER BY "T2C1", "T1C2"

更新:根据@Blaine 的建议,我切换到 HSQLDB 2.2.6 并将上述脚本中的 \x 命令替换为以下内容:

\.

SELECT
(SELECT TOP 1 "T2"."C1" FROM "PUBLIC"."TABLE2" "T2"
 WHERE "T2"."C1" = "T1"."C1") AS "T2C1",
"T1"."C2" AS "T1C2"
FROM "PUBLIC"."TABLE1" "T1"
ORDER BY "T2C1", "T1C2"

.;

\x :

最佳答案

这需要版本 2.2.6。

一旦您拥有 2.2.6,\x? 将向您展示您需要知道的一切。

由于您希望它在脚本中运行,您可以使用原始模式将多行 SQL 语句输入到 SqlTool 的命令缓冲区中,然后使用 \x :。助记符:“:”表示SqlTool的编辑缓冲区。

关于sql - 如何在HSQLDB中使用多行SELECT语句导出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169936/

相关文章:

sql - 等同于带data.table的sql笛卡尔查询

mysql - 连续显示多条记录

sql - 用于生成多个值的条件内连接语句 (VBA/SQL)

mysql - 数据库与 fstream 访问

mysql - 如何编写一个 SQL 查询来获取一个列中的 ID,而该列中的所有必需数据都在其他列中?

java - 如何设置HSQLDB的时区?

unit-testing - 为什么使用内存数据库时此 NamedQuery 不起作用?

sql - 触发器以确保总和小于不同表中的值

sql - 同时使用 guid 和 int 作为表的唯一标识符有多常见?

mysql - HSQLDB:选择查询优先于插入查询