Как мне сделать множественную вставку? - PullRequest
1 голос
/ 21 марта 2011

У меня есть две таблицы: Персона и Роль.

Я хочу найти таблицу Персона и найти всех, кто живет в Окленде.Если они живут в Окленде, назначьте им роль диспетчера в таблице PersonRole.

Поскольку реальный набор данных содержит 100 строк в таблице person, я бы настоятельно предпочел, чтобы запрос или запросы, которые выполняются, выполняли поиск в Personсначала таблицу, чтобы получить значения Person_ID, а затем каким-то образом выполнить множественную вставку с извлеченными данными.

SO, пожалуйста, помогите!

Пример данных

Персональная таблица

Персона_ID .... Имя ........ Город

0 ................... Дейв ........ Окленд

1 ................... Джейн ........Oakland

2 ................... Стив ....... Сан-Франциско

Таблица ролей

Role_ID .... Роль

0 .............. Менеджер

1 .............. Ассистент

PersonRole

Person_ID ...... Role_ID

Ответы [ 2 ]

3 голосов
/ 21 марта 2011
INSERT INTO PersonRole
            (Person_ID,
             Role_ID)
SELECT Person_ID,
       0 AS Role_Id
FROM   Person
WHERE  City = 'Oakland';

Вы можете добавить

EXCEPT
SELECT Person_ID,
       Role_ID
FROM PersonRole      

В конце концов, если некоторые жители Окленда уже могут быть менеджерами (при условии, что SQL Server 2005 +).

1 голос
/ 21 марта 2011

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

INSERT INTO PersonRole 
  (PersonID, 
   Role_ID)
SELECT
   p.Person_ID,
   0
FROM Person p
LEFT JOIN PersonRole pr ON 
   pr.Person_ID = p.Person_ID 
   AND pr.Role_ID = 0  --Make sure the record doesn't already exist
WHERE 
   p.City = 'Oakland' 
   AND pr.Person_ID IS NULL --Make sure the record doesn't already exist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...