Как перенести скрипт postgres в скрипт hsqldb? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть скрипт, который я успешно запускаю в postgres db, однако он не был выполнен при запуске в hsqldb. Может кто-нибудь помочь мне изменить этот sql, чтобы он работал как для HSQLDB, так и для Postgres DB? Ниже мой сценарий:

UPDATE tableA af
SET columnA2 = b.columnB2
from
  ( select columnB1, columnB2 from.....) as b
Where af.columnA1 = b.columnB1;

Это выдает следующее исключение, когда я запускаю его в hsqldb:

Причина: java.sql.SQLSyntaxErrorException: пользователю не хватает привилегии или объект не найден: b.columnB2 Причина: org.hsqldb.HsqlException: пользователь отсутствует привилегия или объект не найден: b.columnB2

Спасибо.


Обновлено: Я создал другое представление, чтобы прояснить свой вопрос.

таблица_A имеет 2 столбца: код компании, номер компании и view_B имеет 2 столбца: company_code, company_number_correct_answer

table_A имеет 10000 строк, а view_B имеет только 2 строки. Я хочу обновить 2 записи в таблице_A , с кодом компании, существующим в view_B, и установить table_A.company_number = view_B.company_number_correct_answer

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

В стандартном SQL предложение FROM (или JOIN или аналогичные вещи) недопустимо для оператора UPDATE.

Если вам нужен оператор UPDATE, который работает с несколькими продуктами баз данных, вам придется использовать связанный подзапрос:

update table_a
  set columna2 = (select columnb2
                  from table_b 
                  where table_b.columnb1 = table_a.columna1)
where exists (select * 
              from table_b 
              where table_b.columnb1 = table_a.columna1);

Обратите внимание, что для этого требуется, чтобы table_b.columnb1 был уникальным или первичным ключом, в противном случае подзапрос вернул бы более одной строки, что приведет к ошибке).

0 голосов
/ 24 апреля 2019

Вы также можете использовать MERGE в HSQLDB

MERGE INTO tableA af
USING (select columnB1, columnB2 from.....) as b
ON af.columnA1 = b.columnB1
WHEN MATCHED THEN
UPDATE SET af.columnA2 = b.columnB2
...