2009-11-06 5 views
4

У меня есть таблица:Вставка строк в таблице, если не нашли в другой таблице

Employee (employeeID) 
EmployeeRank (rankID, employeeID) 

Теперь у меня есть еще один стол, который имеет все работник, которые собираются, чтобы получить повышение.

DueForRaise (rankID, employeeID) 

я должен вставить все работники, находящиеся в DUeForRaise в таблице EmployeeRank ТОЛЬКО, если они уже не существуют с того же ранга.

Я делаю это обновление для идентификатора участника, @rankID.

Будет ли это работать?

INSERT EmployeeRank (rankID, employeeID) 
SELECT rankID, employeeID 
FROM DueForRaise dfr 
     OUTER JOIN EmployeeRank er er.employeeid = dfr.employeeid) 
WHERE dfr.rankID = @rankID 

ответ

13

Как насчет:

insert into EmployeeRank 
select * from DueForRaise p 
where NOT EXISTS(
    SELECT * FROM EmployeeRank WHERE rankID=p.rankID and employeeID=p.employeeID 
); 
+0

Спасибо, за огромные таблицы, на ваш взгляд, это оптимизированный запрос? – LightTechnician

+1

Это зависит от индексов, которые у вас есть. Я бы проиндексировал EmployeeRank на (rankID, employeeID) – Nestor

-1

IF NOT EXISTS (SELECT * FROM EmployeeRank WHERE rankID = @rankID И EmployeeID = @employeeID)

INSERT INTO EmployeeRank (rankID, EmployeeID) VALUES (@rankID, @employeeID)

+0

спасибо ... но employeeID не является параметром :) – mrblah

Смежные вопросы