我有两个表,Person和Role。
我想搜索人员表,找到住在奥克兰的所有人。如果他们住在奥克兰,请在PersonRole表中为他们分配一个管理员角色。
因为真实数据集在人员表中有100行,所以我强烈希望运行的查询或查询首先搜索Person表,检索Person_ID值,然后以某种方式对检索到的数据进行多次插入。
所以,请帮忙!
示例数据
人员表
PERSON_ID ....名称........市
0 ...................戴夫........奥克兰
1 ...................简........奥克兰
2 ...................史蒂夫.......旧金山
角色表
ROLE_ID ....作用
0 ..............经理
1 ..............助理
PersonRole
PERSON_ID ...... ROLE_ID
答案 0 :(得分:3)
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 :(得分:1)
如果向“人员角色”添加左连接,则可以确保该记录尚不存在。
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