Замена NULL другим значением во время операции JOIN в HSQLDB - PullRequest
0 голосов
/ 17 ноября 2011

Когда я запускаю следующий скрипт (q.sql) с помощью HSQLDB 2.2.5, содержимое results.csv становится следующим:

results.csv :

C1,C2
[null],e
a,b

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

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") AS "T2C1",
"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"

Как я могу изменить свой сценарий так, чтобы "[null]" заменялось на "?"в полученном CSV-файле?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

в зависимости от dbengine:

для hSQL ... любая из 3-х работает согласно: hSQLDB.org

coalesce (MOST)

NVL (оракул)

ifNull (mysql) ИЗМЕНЕНО, чтобы добавить (... (Ой, я забыл!)

SELECT
coalesce((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

Вместо вставки значения из таблицы используйте синтаксис case для вставки, чтобы проверить, является ли значение нулевым.

Примерно так:

case when value = [null] then ? else variable end
...