Как вы делаете несколько вставок, которые имеют выбор - PullRequest
0 голосов
/ 13 мая 2011

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

INSERT INTO marriedcouples (male,female) VALUES (
(SELECT id FROM men WHERE username='brad',
 SELECT id FROM women WHERE username='jennifer')
(SELECT id FROM men WHERE username='ken',
 SELECT id FROM women WHERE username='barbie'))

Предположим, у меня есть таблицы с:

мужчинами (имя, имя), женщинами (имя, имя), парами (идентификатор, мужчина, женщина)

и т. Д.

Спасибо, Дэн

1 Ответ

4 голосов
/ 13 мая 2011
Insert marriedcouples( male, female )
Select M.id, W.id
From Men As M
    Cross Join Women As W
Where ( M.username = 'brad' And W.username = 'jennifer' )
    Or ( M.username = 'ken' And W.username = 'barbie' )

Добавление

В комментариях вы спрашивали конкретно о проблемах с вашим исходным запросом. Во-первых, вы могли бы использовать свой оригинальный подход так:

Insert marriedcouples( male, female )
Select ( Select Id From men Where username = 'brad' )
    , ( Select Id From women Where username = 'jennifer' )
Union All
Select ( Select Id From men Where username = 'ken' )
    , ( Select Id From women Where username = 'barbie' )

Обратите внимание, что каждое значение заключено в круглые скобки как его собственный инкапсулированный подзапрос. Во-вторых, обратите внимание, что я использовал директиву Union All, чтобы позволить мне сложить два запроса и дать мне две строки. В-третьих, обратите внимание, что я не пытаюсь использовать директиву Values ​​в сочетании с подзапросами. Вы можете использовать предложение Values, чтобы вывести список значений, или вы можете использовать оператор Select, но не оба, как вы это сделали. Очевидно, что этот подход четырех подзапросов не будет работать хорошо, но он помогает понять разбивку синтаксиса.

...