Как вы вставляете строки в Postgresql 8.4, когда один столбец является значением переменной? - PullRequest
2 голосов
/ 14 июня 2011

Я хочу вставить записи в таблицу «books» для каждого автора в таблице «author».Другими словами, если бы это представляло таблицу автора:

> 1 - "Herman Melville" 
> 2 - "Stephen King" 
> 3 - "Truman Capote"

... тогда вставка выдала бы эти результаты в таблице "book":

> 'Hello World' - 1
> 'Hello World' - 2
> 'Hello World' - 3

У меня естьследующий оператор INSERT (это на самом деле грубый пример, но он демонстрирует цель):

INSERT INTO books (title, author_id) VALUES ('Hello World', SELECT id FROM author);

К сожалению, это не удается, и я не уверен, как получить каждое из значений "id" от "автора"Таблица.

Ответы [ 4 ]

9 голосов
/ 14 июня 2011

Непонятно, почему вы хотите вставить одну и ту же запись для каждого автора, но вы можете использовать SELECT в качестве источника для вашей INSERT, например:

INSERT INTO books (title, author_id)
    SELECT 'Hello World', id
    FROM author

Edit: для получения дополнительной информации, проверьте документы для INSERT; как видите, источником может быть либо ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ, ЗНАЧЕНИЕМ, либо запрос.

3 голосов
/ 14 июня 2011

Вы можете использовать это:

INSERT INTO books (title, author_id) SELECT 'Hello World', id FROM author;
2 голосов
/ 14 июня 2011

Вы также можете заключить подвыбор в круглые скобки:

 INSERT INTO books (title, author_id) 
  VALUES ('Hello World',  (SELECT id FROM author WHERE...) );

Этот синтаксис может быть проще для понимания, но другой синтаксис, указанный другими комментаторами (без ЗНАЧЕНИЙ), вероятно, более чистый: вы просто создаете на лету запись, которую хотите вставить (с помощью SELECT), а затем вставляете ее ; это также может быть более эффективным, если у вас есть много подвыборов для полей округа.

1 голос
/ 14 июня 2011
INSERT INTO books (title, author_id) SELECT 'Hello World', id FROM author
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...