2015-10-16 30 views
0

我有一個表function role與2列rolefunction。兩者都是主鍵。需要插入數據使用合併查詢

數據如下

role   function 

analyst  execute 
BAU   execute 
SYS   execute 
SYS   create 

我想execute功能所有角色有甚至create功能也。

如何通過sql查詢來實現這一點?

我的輸出應該像

role   function 

analyst  execute 
analyst  create 
BAU   execute 
BAU   create 
SYS   execute 
SYS   create 

請幫幫忙!

+1

哪個dbms? (答案可能取決於所使用的dbms產品...) – jarlh

+0

除了執行和創建之外是否還有其他可能的函數值? – jarlh

+0

甲骨文..這3個角色被映射到許多功能..我甚至想創建一個函數映射到角色..但與合併查詢 – sun

回答

0

兩者都是主鍵。

這是不可能的。一個表最多可以有一個主鍵(然而,列的組合可能是

即使您將其中的一個作爲主鍵,那麼您也無法在表中插入重複值。

最後嘗試避免在數據類型爲varchar或text的列上創建主鍵。你

也可以使用簡單的INSERT語句來插入數據在表中是這樣的:

insert into myTable(`role`,`function`) 
values('analyst','execute') 

注意,作用和功能是保留關鍵字一些數據庫。所以你需要小心它,並使用正確的語法來克服它。像SQL Server中的Mysql。[]的反引號一樣。

+0

我想OP意味着他們在一起是主鍵。 – jarlh

+0

@jarlh: - 我的理解矛盾;) –

+0

@jarlh: - 更新了我的答案,以克服它! –

0

ANSI SQL標準的答案,應該與Oracle也工作得很好:

insert into function_role 
    select role, 'create' from function_role f1 
    where "function" = 'execute' 
     and not exists (select 1 from function_role f2 
         where f2.role = r1.role 
         and f2."function" = 'create') 

由於function是ANSI SQL保留字它的劃界爲"function"