SQL Server:当值或记录不存在时插入记录



为了简单起见,假设我有两个表:一个称为People,另一个称为Contacting

People表:

ID primary key
NAME
WEBSITE
EMAIL

Contacting表:

ID (foreign key to People ID)
WAY_OF_CONTACTING
REFERENCE

逻辑如下:对于People表中的每个人,Contacting的表上可能有几个记录。显然,PeopleContacting之间的关系是一对多的。

WAY_OF_CONTACTING只能有 2 个值:"电子邮件"和"网站",REFERENCE列包含电子邮件或网站名称。

Contacting表的主键是由IDWay_Of_Contacting组成的复合主键(这意味着,对于每个 ID,它们最多只能有一个电子邮件和一个网站)

人们表上的记录每晚都会被删除,并在白天填充。

"人员"表中可能会发生 4 种情况:

  1. 网站和电子邮件为空
  2. 网站为空,但不是电子邮件
  3. 电子邮件为空,但不是网站
  4. 网站和电子邮件都不为空

我的问题如下:

对于People表中的每条记录

  • ID存在于Contacting中但没有recordWay_of_Contacting='Website'或 ID 在Contacting不存在时,insert into Contacting记录

  • ID存在于Contacting中但没有Way_of_Contacting='Website'record或 ID 在Contacting不存在时,insert into Contacting记录

换句话说:

  • 如果Contacting表中存在People ID,请检查记录在字段Way_of_Contacting上是否具有值"电子邮件"。
  • 如果此类记录不存在,并且People table中的Email字段不为空,则insert a record
  • 如果ID不存在,并且">人员"Email字段不为空,则insert a record

Website也是如此

如何做到这一点?

我尝试使用mergeif not exists但我似乎找不到正确的答案

您可以尝试使用视图而不是如下所示的表格吗?优点是视图始终基于人员表进行更新。

CREATE VIEW dbo.Contacting
AS  
Select
ID
,'Website' as Way_of_Contacting
,WEBSITE as Reference   
From People
Where WEBSITE is not null
Union all
Select
ID
,'Email' as Way_of_Contacting
,Email as Reference 
From People
Where Email is not null

相关内容

  • 没有找到相关文章

最新更新