Sql 如何插入带有“条件”的数据;“如果不存在”;

Sql 如何插入带有“条件”的数据;“如果不存在”;,sql,insert,Sql,Insert,我只想插入B中角色| |电子邮件与A中已存在的角色| |电子邮件不匹配的行,而忽略其他行(如名称) 我的桌子是: 表A有三列(名称、角色、电子邮件) 表B有三列(姓名、角色、电子邮件) 我尝试了以下方法: 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中角色| |电子邮件与A中已存在的角色| |电子邮件不匹配的行,而忽略其他行(如名称)

我的桌子是:

  • 表A有三列(名称、角色、电子邮件)
  • 表B有三列(姓名、角色、电子邮件)
我尝试了以下方法:

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);
但它不起作用,我如何解决这个问题

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
更改为(姓名、角色、电子邮件)中永远不会为空的任何栏。

请通过添加一个有序的示例查询来清理您的问题。感谢Tim和所有帮助改进问题的朋友的提醒!带空条件的外部联接意味着B中的记录与A中的电子邮件组合没有相同的角色。@TimBiegeleisen。谢谢,抱歉,我不能投票支持你的答案,因为我没有足够的信誉。你的回答太棒了,我从来没有想到过这个解决方案。站在你的肩膀上,我考虑了可为空的电子邮件,改进了答案,正如在你的查询中,当电子邮件为空时,B的重复数据将插入B。无论如何,我对此表示感谢!在A(名称、角色、电子邮件)中插入选择B.NAME、B.ROLE、B.EMAIL from B left在B.ROLE=A.ROLE和nvl(B.EMAIL,'XXX')=nvl(A.EMAIL,'XXX'),其中A.ROLE为空