2015-03-19 49 views
-2

我想只插入來自B的行,其中角色||電子郵件不匹配Role ||電子郵件已經存在於A中,並且忽略其餘的(如NAME) 。如何插入條件爲「如果不存在」的數據

我的表格是:

  • 有三列(姓名,角色EMAIL)
  • 有三列(姓名,角色EMAIL)

表B表A I試過如下:

insert into A (NAME, ROLE, EMAIL) 
SELECT NAME, ROLE, EMAIL from B 
where NOT EXISTS (SELECT ROLE, EMAIL FROM B WHERE A.NAME = B.NAME AND A.EMAIL = B.EMAIL); 

雖然不行,但我該如何解決?

+0

請通過添加有關您正在嘗試做的有序示例查詢來清理您的問題。 – 2015-03-19 06:22:37

+0

感謝提醒Tim和所有幫助改善問題的朋友! – 2015-03-20 06:59:59

回答

0
insert into A (NAME, ROLE, EMAIL) 
select B.NAEM,B.ROLE,B.EMAIL from B left outer join A 
on B.ROLE=A.ROLE and B.EMAIL=A.EMAIL 
where A.ROLE is null 

請確保您有沒有空,你在角色列,如果是這樣,A.ROLE is null更改爲(名稱,角色,EMAIL)任何列,將永遠不會爲空。

+0

帶空條件的外連接表示B中的那些記錄與A @@ TimBiegeleisen沒有相同的ROLE組合。 – amow 2015-03-19 06:27:02

+0

謝謝Amow,對不起,我不能投你的答案,因爲我沒有足夠的聲譽信用。你的回答非常棒,我從來不會想到這個解決方案。並且站在你的肩膀上,我考慮了可空的EMAIL來改進答案,就像在你的查詢中一樣,當電子郵件爲空時,B中的重複數據將被插入到B中。無論如何,我非常感謝! 插入到A(名稱,角色,電子郵件) 從B選擇B.NAME,B.ROLE,B.EMAIL在B.ROLE = A.ROLE和nvl上添加A (B.EMAIL,'XXX') = nvl(A.EMAIL,'XXX')其中A.ROLE爲空 – 2015-03-21 00:18:42