Как я могу заказать результаты, как они вставлены в таблицу HSQLDB? - PullRequest
1 голос
/ 17 ноября 2011

Когда я запускаю следующий скрипт с использованием HSQLDB, я получаю сообщение об ошибке user lacks privilege or object not found: T2C1.Как я могу заказать строки, как они вставлены в таблицу TABLE3?Могу ли я достичь этой цели без добавления другой таблицы?

Обратите внимание, что если я прокомментирую строку ORDER BY "T2C1", "T1C2", я не получу никаких сообщений об ошибках, но TABLE3 также не будет отсортирован.

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');

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

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

INSERT INTO "PUBLIC"."TABLE3" (
  "C1",
  "C2"
)
SELECT 
(SELECT
"T2"."C1" AS "T2C1"
FROM "PUBLIC"."TABLE2" "T2"
WHERE "T2"."C1" = "T1"."C1"),
"T1"."C2" AS "T1C2"
FROM "PUBLIC"."TABLE1" "T1"
ORDER BY "T2C1", "T1C2"
;

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

\x "PUBLIC"."TABLE3"

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

HSQLDB 2.2.x поддерживает использование ORDER BY здесь. Проблема с вашим SELECT заключается в отсутствии псевдонима столбца T2C1 для скалярного подзапроса. Попробуйте это:

INSERT INTO "PUBLIC"."TABLE3" (
  "C1",
  "C2"
)
SELECT 
(SELECT
"T2"."C1" AS "T2C1"
FROM "PUBLIC"."TABLE2" "T2"
WHERE "T2"."C1" = "T1"."C1") AS T2C1,
"T1"."C2" AS "T1C2"
FROM "PUBLIC"."TABLE1" "T1"
ORDER BY "T2C1", "T1C2"
;
0 голосов
/ 17 ноября 2011

Для меня это не имеет особого смысла, поскольку порядок вставок не имеет значения, как уже упоминалось на различных форумах:

Я думаю, что HSQLDB просто выдает неправильное сообщение об ошибке. Это не работает с MSSQL.

...