2014-09-02 41 views
0

我有三個表:如何大規模更新?

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 

配置文件可能在多個組。我有名爲「用戶」的組ID = 1,並且我希望將所有用戶分配到該組,但前提是表格配置文件沒有這樣的條目。

怎麼辦?

+1

您能否重新說明問題並更清楚一點?你有配置文件和組,並希望將所有用戶分配給一個組...是用戶的配置文件嗎? – Twelfth 2014-09-02 23:04:59

回答

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; 
+0

這個答案的問題在於左連接不會限制組1的profile_group記錄,請查看關於此問題的其他答案以查看正確的實現。 – mjallday 2014-09-03 18:18:58

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