В PostgreSQL, как вставить INTO и использовать столбец автоинкремента таблицы назначения - PullRequest
0 голосов
/ 19 января 2012

Предположим, у вас есть две таблицы в PostgreSQL. Таблица A имеет поле x , которое имеет тип символ варьируется и имеет много дубликатов. Таблица B имеет поля y , z и w . y - это столбец serial , z имеет тот же тип, что и x , а w - целое число.

Если я выдам этот запрос:

INSERT INTO B
SELECT DISTINCT ______, A.x, COUNT(A.x)
FROM A
WHERE x IS NOT NULL
GROUP BY x;

Я получаю ошибку независимо от того, что у меня в ______. Я даже стал таким экзотическим, как CAST(NULL as INTEGER), но это просто дает мне эту ошибку:

нулевое значение в столбце "id" нарушает ненулевое ограничение

Есть ли простое решение?

1 Ответ

4 голосов
/ 19 января 2012

Вам разрешено и даже рекомендуется указывать столбцы при использовании INSERT (и вам действительно следует всегда указывать столбцы):

insert into b (z, w)
select x, count(x)
from a
where x is not null
group by x

И я не вижу смысла distinct, когда вы уже группируете по x, поэтому я отбросил это; Я также удалил префиксы столбцов, так как они не нужны, и просто добавил шум в SQL.

Если вы не укажете столбец при использовании INSERT, вы получите значение по умолчанию, которое даст вам искомое значение последовательности.

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