sql объединение в нескольких списках значений - PullRequest
0 голосов
/ 05 марта 2020

У меня есть таблица sql Postgres с составным идентификатором, и я хочу заполнить широкий диапазон значений для этой таблицы, если данные еще не существуют. У меня есть таблица

CREATE TABLE MyTable (
idCol1              VARCHAR(256) NOT NULL,
idCol2              VARCHAR(256) NOT NULL,
idCol3              VARCHAR(256) NOT NULL,
amount              VARCHAR(256) NOT NULL,
)

И для всех значений idCol1 в ['A', 'B', 'C'], idCol2 в ['D', 'E', 'F '], idCol3 в [' G ',' H ',' I '] Я хочу установить значение суммы, если строка еще не существует.

Проблема заключается в idCol1, idCol2 и idCol3 не являются ключевым ключом, и их значение не указано ни в одной таблице. Я должен заполнить их непосредственно в запросе sql.

У меня проблемы с написанием запроса, который одновременно вставляет данные, выполняет объединение в массив данных из 3 различных типов и не стирает существующие данные.

Как мне это сделать?

1 Ответ

1 голос
/ 05 марта 2020

Хотите вставить строки, которых нет? Если так:

insert into mytable (idcol1, idcol2, idcol3, amount)
    select i1.idcol1, i2.idcol2, i3.idcol3, 0 as amount
    from (values ('A'), ('B'), ('C')) i1(idcol1) CROSS JOIN
         (values ('D'), ('E'), ('F')) i2(idcol2) CROSS JOIN
         (values ('G'), ('H'), ('I')) i3(idcol3) LEFT JOIN
         mytable t
         USING (idcol1, idcol2, idcol3)
    where t.idcol1 IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...