2015-05-29 73 views
1

我需要創建一個存儲過程,以根據某些條件將數據插入另一個表中。在現有的表中,如果兩列(主角色和次角色)具有相同的值,那麼我只希望新表中有一行以角色作爲主角色。如何根據Sybase中的某些條件將行插入另一個表中的新表中?

如果舊錶中的行在主角色和次角色中具有不同的值,我希望新表中有兩行,一個角色的值作爲舊錶的主角色,另一個作爲輔助角色。

達到此目的的最佳方法是什麼?

現在我的查詢看起來是這樣的

create procedure proc as 
begin 
    insert into newTable values(role) 
    select primary_role as role from oldTable 
    where primary_role = secondary_role 
end 

這不處理這種情況的主要作用是不一樣的次要角色的情況。

Sample 

sample row oldTable 

PrimaryRole | SecondaryRole | Name 

admin  | analyst  | Sara 

sample row newTable 

Role | Name 

admin | Sara 

analyst | Sara 
+0

你能給一些示例數據,說明在主要角色和次要角色不同的值的情況下?即oldTable中的一行,以及newTable中的兩個新行。 – jarlh

回答

1

我不是一個sybase專家,但我會做這樣的事情(語法可能需要修改)。另外,如果你在表演之後,這可能會更巧妙地完成。

insert into newTable values(role, name) (
    select primary_role as role, name from oldTable 
    where primary_role+name not in (select distinct role+name from newTable) 
) 

    insert into newTable values(role, name) (
    select secondary_role as role, name from oldTable 
    where secondary_role+name not in (select distinct role+name from newTable) 
) 

這顯然會運行2個不同的插入,這就是爲什麼它也許可以做出更好的性能,但它基本上將嘗試添加的所有主要角色和所有次要角色,檢查,看看是否角色已經從存在上一次運行。所以不需要檢查primary = secondary的情況。

編輯

或者,您可能能夠將所有使用UNION:

insert into newTable values(role, name) (
    select distinct role, name from (
     select primary_role as role, name from oldTable 
     union all 
     select secondary_role as role, name from oldTable 
    ) 
) 
+0

'select'周圍的括號對於'insert ... select'語句無用。 –

相關問題