我有三张桌子:
group:
id - primary key
name - varchar
profile:
id - primary key
name - varchar
surname - varchar
[...etc...]
profile_group:
profile_id - integer, foreign key to table profile
group_id - integer, foreign key to table group
个人资料可能在很多群组中。我有一个名为“Users”的组,其id = 1,我想将所有用户分配给该组,但前提是表格配置文件没有这样的条目。
怎么做?
答案 0 :(得分:1)
如果我理解正确,您希望将( profile_id ,1)等条目添加到profile_group
表中,以用于之前不在此表中的所有配置文件。如果是这样,试试这个:
INSERT INTO profile_group(profile_id, group_id)
SELECT id, 1 FROM profile p
LEFT JOIN profile_group pg on (p.id=pg.profile_id)
WHERE pg.group_id IS NULL;
答案 1 :(得分:0)
您要做的是使用左连接到配置文件组表,然后排除任何匹配的记录(这在以下SQL语句的where子句中完成)。
这比使用not in (select xxx)
更快,因为查询分析器似乎更好地处理它(根据我的经验)
insert into profile_group (profile_id, group_id)
select p.id, 1
from profiles p
left join profile_group pg on p.id = pg.profile_id
and pg.group_id = 1
where pg.profile_id is null