Добавить строки в таблицу SQL на основе списка значений - PullRequest
0 голосов
/ 09 января 2020

Итак, у меня есть такая таблица и список атрибутов - ('attr1', 'attr2', 'attr3').

id | attr_name | attr_value
----------------------------
 1 |   attr1   |  val1 
 1 |   attr2   |  val2
 1 |   attr3   |  val3 
 2 |   attr1   |  val1
 2 |   attr2   |  val4

Я хочу сделать запрос, где эта таблица может быть " развернуто ", чтобы быть следующим, а затем сделать запрос, используя его.

id | attr_name | attr_value
----------------------------
 1 |   attr1   |  val1 
 1 |   attr2   |  val2
 1 |   attr3   |  val3 
 2 |   attr1   |  val1
 2 |   attr2   |  val4
 2 |   attr3   |  null

Список атрибутов дан мне и Dynami c.

Ответы [ 3 ]

2 голосов
/ 09 января 2020

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

SELECT x1.id,
       x2.attr_name,
       t2.attr_value
       FROM (SELECT DISTINCT
                    t1.id
                    FROM elbat t1) x1
            CROSS JOIN (VALUES ('attr1'),
                               ('attr2'),
                               ('attr3')) x2 (attr_name)
            LEFT JOIN elbat t2
                      ON t2.id = x1.id
                         AND t2.attr_name = x2.attr_name
       ORDER BY x1.id,
                x2.attr_name;                     
1 голос
/ 09 января 2020
WITH 
ids AS ( SELECT DISTINCT id
         FROM sourcetable ),
attrs AS ( SELECT DISTINCT attr_name
           FROM sourcetable )
INSERT INTO sourcetable (id, attr_name)
SELECT id, attr_name
FROM ids, attrs
EXCEPT
SELECT id, attr_name
FROM sourcetable
0 голосов
/ 09 января 2020

извините, если это кажется очевидным, но вы пробовали

INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2')

?

Затем, когда вы запрашиваете вашу таблицу, она должна содержать значение

Редактировать: также вы может хотеть иметь уникальный ключ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...