2013-01-17 18 views
0

更新基於一組的結果的表基於一組的結果的表我有我試圖解決一個棘手的更新問題。有跡象表明,含有相同的三列加上額外的多樣化列兩個表,看起來像這樣:更新由</p> <p>通過

Table1 {pers_id, loc_id, pos, ... }

Table2 {pers_id, loc_id, pos, ... }

領域都不是唯一的。前兩個字段共同標識一個或多個表中的記錄屬於同一個實體。 Table1可以有15條記錄屬於一個實體,而table2可以有4條記錄屬於同一個實體。第三列'pos'是從0到任何的索引,這是我試圖更新的列。

在表1和表2中,pos列從0開始,並且基於用戶選擇進行遞增,以便在示例中(table1中的15條記錄和table2中的4條記錄),table1包含'pos'值0 - 14,Table2包含0-3的'pos'值。

我想用Table2中類似實體的計數結果增加表1中的pos字段。這是SQL語句正確地讓我從表2的結果:

select table2.pers_id, table2.loc_id, count(*) as pos_increment from table2 group by table2.pers_id, table2.loc_id;

更新,在本例的最終結果(15條記錄中的表1和4個記錄表2),將是所有記錄同一實體的表1增加4(特定實體組的結果)。 0將改爲4,15到19等。

這是否可以在一個聲明中實現?

回答

0

是的,這是可能的,你可以對這些upadtes中的一些使用MERGE,並且有方法將update和subselect之間的值聯繫起來。過去我曾經這樣做過,但這很棘手,我沒有現有的例子。

你可以在這個網站上找到幾個例子,一些用於Oracle,一些用於其他數據庫,稍作修改即可。

1

既然你只需要遞增pos領域的解決方案是非常簡單的:

update table1 t1 
set t1.pos = t1.pos + 
    (select count(1) 
    from table2 t2 
    where t2.pers_id = t1.pers_id 
    and t2.loc_id = t1.loc_id) 
+1

只是打我吧,演示[這裏](http://www.sqlfiddle.com/#!4/ ac2b4/1) – GarethD

+0

完美 - 作品像魅力。謝謝。 – bill89654

+0

請標記答案已被接受。謝謝。 –

相關問題