Могу ли я написать запрос на вставку, используя данные из двух соединенных таблиц? - PullRequest
3 голосов
/ 12 февраля 2011

У меня есть SELECT запрос, подобный этому:

SELECT id_default_value, id_type FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = ntg_module_attribute.id;

Возвращает 2 столбца, id_default_value и id_type. Затем я хотел бы использовать эти данные в качестве основы INSERT запроса в другую таблицу, ntg_default_value, используя id_default_value в качестве ключа и id_type в качестве вставленного значения.

Следующее уже близко, но не совсем:

INSERT INTO ntg_default_value (id, id_type) 
SELECT id_default_value, id_type FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = ntg_module_attribute.id;

Это дает мне:

ERROR:  duplicate key value violates unique constraint "pk_ntg_default_value"

Возможно ли то, что я пытаюсь сделать? Если да, то как мне построить запрос?

(PostgreSQL 8.4.6)

1 Ответ

1 голос
/ 12 февраля 2011

Имя ограничения 'pk_ntg_default_value', вероятно, означает, что вы нарушаете ограничение первичного ключа таблицы ntg_default_value.

В зависимости от ваших требований вы можете снять ограничение первичного ключа. Или вы можете расширить его, добавив в него id и id_type, если это еще не сделано, и добавить GROUP BY к вашему запросу, если это необходимо, чтобы предотвратить дублирование пар id_devault_value и id_type. Ваш запрос становится потом:

INSERT INTO ntg_default_value (id, id_type)
SELECT id_default_value, id_type 
FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = 
      ntg_module_attribute.id 
GROUP BY id_default_value, id_type
...